[TL; DR] VAR
- ключевое слово для объявления переменной и не является типом данных;Ваша фактическая ошибка связана с использованием неверного синтаксиса, когда вы пытались определить свою процедуру, но она не скомпилирована.
VAR
- это сокращение от VARIABLE
и определяет переменную связывания PL / SQL.
Это объявление имеет синтаксис :
VAR[IABLE] [variable [type] ]
, где тип представляет собой одно из следующего:
NUMBER
CHAR
CHAR (n [CHAR | BYTE])
NCHAR
NCHAR (n)
VARCHAR2 (n [CHAR | BYTE])
NVARCHAR2 (n)
BLOB
BFILE
CLOB
NCLOB
REFCURSOR
BINARY_FLOAT
BINARY_DOUBLE
Итакс помощью:
var cl CLOB;
вы объявляете переменную с помощью ключевого слова VAR
, а переменная называется cl
и имеет тип CLOB
.
Кроме того, ваш CREATE PROCEDURE
В операторе есть синтаксическая ошибка, так как вы не можете иметь одинарные кавычки вокруг имени процедуры.Например:
CREATE PROCEDURE procedure_name (clb OUT CLOB)
IS
BEGIN
clb := 'test';
END;
/
Затем:
VAR cl CLOB;
EXECUTE procedure_name( :cl );
PRINT cl;
Выходы:
test
Обновлено :
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE ERROR_DETAILS(
ERROR_ID NUMBER,
ERROR_CODE NUMBER,
ERROR_DATE DATE,
PROCEDURE_NAME VARCHAR2(30),
ERROR_MSG VARCHAR2(512)
)
/
CREATE PROCEDURE procedure_name (cl OUT CLOB)
IS
BEGIN
SELECT DUMMY
INTO cl
FROM dual
WHERE ROWNUM = 1;
EXCEPTION
WHEN
OTHERS THEN
DECLARE
err_num NUMBER := SQLCODE;
err_msg VARCHAR2(512) := SQLERRM;
BEGIN
INSERT INTO /* ODS_CONTROL. */ ERROR_DETAILS(
ERROR_ID,
ERROR_CODE,
ERROR_DATE,
PROCEDURE_NAME,
ERROR_MSG
) VALUES (
TO_NUMBER( TO_CHAR( CURRENT_TIMESTAMP, 'YYYYMMDDHH24MISSFF9' ) ),
err_num,
SYSDATE,
'PRC_FLEXI_CARD',
err_msg
);
END;
END;
/
Запрос 1 :
SELECT * FROM USER_ERRORS
Результаты :
No rows selected