甲骨文:缺少表达

时间:2015-02-26 02:01:45

标签: oracle plsql

我有这组代码,编译时没有返回错误。

create or replace PROCEDURE PARAM_CHECK
(
  PARAM_CODE IN VARCHAR2, 
  TABLE_NAME IN VARCHAR2,
  ISEXIST OUT INTEGER
) 
IS 
SQLSTMT VARCHAR2(200);
V_COUNT NUMBER;
BEGIN  
SQLSTMT := 'SELECT COUNT(*) INTO '|| V_COUNT ||' FROM '|| TABLE_NAME ||' WHERE ID = '''||PARAM_CODE||''' AND ROWNUM = 1';  
EXECUTE IMMEDIATE SQLSTMT;
COMMIT;
IF 
V_COUNT = 0 THEN
ISEXIST := 0;
ELSE
ISEXIST := 1;
END IF;

END PARAM_CHECK;

但是当我尝试运行该程序后,它会返回此错误:

Connecting to the database SAA.
ORA-00936: missing expression
ORA-06512: at "SAA.PARAM_CHECK", line 12
ORA-06512: at line 9
Process exited.
Disconnecting from the database SAA.

我不知道为什么它会返回这个错误,加上当我编译一切都没关系。我确实搜索了特定的ORA错误,但没有多大帮助。请帮我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

Vcount在将其值包含在sql语句中时未初始化,因此它在此位置产生一个sytactically错误的空白。

如果可行,你必须写

SQLSTMT := 'SELECT COUNT(*) INTO V_COUNT FROM '|| TABLE_NAME ||' WHERE ID = '''||PARAM_CODE||''' AND ROWNUM = 1';  

但是这不会对iirc起作用,因为执行立即打开一个新范围。

你必须求助于

SQLSTMT := 'SELECT COUNT(*) FROM '|| TABLE_NAME ||' WHERE ID = '''||PARAM_CODE||''' AND ROWNUM = 1';
EXecute immediate sqlstmt into v_count;