执行立即声明问题 - 变量字段名称和表名称

时间:2016-12-13 13:21:00

标签: oracle plsql

您好我正在尝试构建一个函数来重置序列以与表ID同步,这些表ID与序列不同步。功能如下:

 create or replace
 FUNCTION P_FNC_SEQUENCERESET(sourceTable IN VARCHAR2, idField IN VARCHAR2, seqname VARCHAR2) RETURN NUMBER
 IS
 ln NUMBER;
 ib NUMBER;
 maxId NUMBER;
 newValue NUMBER;
 diffValue NUMBER;
 interimValue NUMBER;
 sqlStmt VARCHAR2(2000);

 BEGIN

 -- Get the maximum of the id field
 EXECUTE IMMEDIATE 'SELECT MAX(' || idField || ') INTO ' || maxId || ' FROM ' || sourceTable;

 ...code continues...

我对EXECUTE IMMEDIATE语句的理解让我相信这应该是可能的,但是当执行时我得到这个错误:

  

ORA-00936:缺少表达式
  ORA-06512:在“PSALERT_ADMIN.P_FNC_SEQUENCERESET”,第16行   ORA-06512:第11行

1 个答案:

答案 0 :(得分:1)

需要看起来像这样:

EXECUTE IMMEDIATE 'SELECT ' || idField ||' FROM ' || sourceTable into maxid;

关键字"进入"不是动态执行的字符串的一部分,但它是"执行立即"的语法的一部分。声明

https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm