Процедура создания ошибки SQL: PLS-00103: обнаружен символ «AS» - PullRequest
1 голос
/ 09 марта 2019

Я вхожу в мир процедуры, и у меня есть эта ошибка, которую я не нашел.

Мне не нужно ничего добавлять, и я не знаю, почему он спрашивает «как».

Спасибо

Ошибка:

LINE/COL ERROR
-------- -----------------------------------------------------------------
2/22     PLS-00103: Encountered the symbol "AS" when expecting one of the
         following:
         in out <an identifier> <a double-quoted delimited-identifier>
         ... long double ref char time timestamp interval date binary
         national character nchar

Код:

CREATE OR REPLACE PROCEDURE INSERT_MOVIMIENTOS (
INSERTMOV_COD_BANCO  AS NUMBER(4),
INSERTMOV_COD_SUCUR  AS NUMBER(4),
INSERTMOV_NUM_CTA    AS NUMBER(10),
INSERTMOV_FECHA_MOV  AS DATE,
INSERTMOV_TIPO_MOV   AS CHAR(1),
INSERTMOV_IMPORTE    AS NUMBER(10)
)

DECLARE 
    sql_str VARCHAR2(500):='';

BEGIN
    sql_str:=sql_str||'INSERT INTO MOVIMIENTOS (';
    dbms_output.put_line(sql_str);
END;    
/

EXEC INSERT_MOVIMIENTOS (0, 0, 0, '2008-11-11', 'o', 0);

1 Ответ

1 голос
/ 09 марта 2019

Я не эксперт по Oracle, но в соответствии с этим: https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6009.htm

Вам нужно использовать IN вместо AS при объявлении входного параметра. Имея это в виду, я бы попробовал это:

CREATE OR REPLACE PROCEDURE INSERT_MOVIMIENTOS (
INSERTMOV_COD_BANCO  IN NUMBER(4),
INSERTMOV_COD_SUCUR  IN NUMBER(4),
INSERTMOV_NUM_CTA    IN NUMBER(10),
INSERTMOV_FECHA_MOV  IN DATE,
INSERTMOV_TIPO_MOV   IN CHAR(1),
INSERTMOV_IMPORTE    IN NUMBER(10)
)

DECLARE 
    sql_str VARCHAR2(500):='';

BEGIN
    sql_str:=sql_str||'INSERT INTO MOVIMIENTOS (';
    dbms_output.put_line(sql_str);
END;    
/

EXEC INSERT_MOVIMIENTOS (0, 0, 0, '2008-11-11', 'o', 0);
...