[TL;[医生]
VAR
是用于声明变量的关键字,不是数据类型;您的实际错误是由于在尝试定义过程时使用了无效语法,而该过程尚未编译。
变量
是的缩写
VARIABLE
并定义一个PL/SQL绑定变量。
本声明具有
syntax
:
VAR[IABLE] [variable [type] ]
其中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;
变量
关键字,变量名为
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
:
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
Results
:
No rows selected