Как вставить несколько строк в таблицу с помощью хранимой процедуры Oracle без параметров - PullRequest
0 голосов
/ 20 мая 2018

У меня есть таблица:

test_1(id int, f_name varchar(20),age int). 

Я хочу заполнить эту таблицу значениями, используя хранимую процедуру.

(1,'josh',23),(2,'jack',34),(3,'liam',45). 

Я знаю, как сделать это с помощью простого SQL, но хочу знать, как это можно сделать с помощью хранимой процедуры.Я использовал хранимую процедуру ниже, но это не сработало и выдало ошибку.Ниже приведена ошибка и процедура под ней.Хранимая процедура была скомпилирована, но с ошибками.

Ошибка: PLS-00103: Обнаружен символ «IN» при ожидании одного из следующих действий:
<an identifier> <a double-quoted delimited-identifier>
текущее удаление существуетprior "

CREATE PROCEDURE insert_test_1(IN a_val int not null,IN b_val varchar(20),IN c_val int(2))
BEGIN
    INSERT INTO test_1
(id,f_name,age) VALUES (a_val ,b_val ,c_val);
END 

Затем я попытался вызвать процедуру, но она не сработала:

CALL insert_test_1(1,'josh',23)

Мне нужна помощь, чтобы это сработало. Заранее спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Неправильные определения параметров.Режим параметров (IN, OUT, INOUT) должен следовать за именем параметра.

Вы не можете указать масштаб или точность определения параметра - вы можете указать только базовый тип (например, INT, VARCHAR, NUMBER и т. Д.).).

Вы также не можете наложить ограничение NOT NULL на определение параметра.

Также обратите внимание - VARCHAR2 предпочтительнее VARCHAR, так как определение Oracle VARCHAR может измениться через некоторое время вбудущее.Семантика VARCHAR2 гарантированно не изменится в будущем.

Таким образом, вы должны использовать

CREATE OR REPLACE PROCEDURE insert_test_1(a_val IN INT,
                                          b_val IN VARCHAR2,
                                          c_val IN INT) IS
BEGIN
  INSERT INTO test_1 (id,f_name,age) VALUES (a_val ,b_val ,c_val);
END;

Если есть ошибки из компиляции, вы можете извлечь их, извлекая данные из представления ALL_ERRORS,аналогично:

SELECT *
  FROM ALL_ERRORS
  WHERE NAME = 'INSERT_TEST_1';

Обратите внимание, что имя должно быть написано заглавными буквами при извлечении данных из ALL_ERRORS.Внутри все имена в Oracle капитализируются, если они не заключены в кавычки.

Удачи.

...