您好我正在尝试构建一个函数来重置序列以与表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行
答案 0 :(得分:1)
需要看起来像这样:
EXECUTE IMMEDIATE 'SELECT ' || idField ||' FROM ' || sourceTable into maxid;
关键字"进入"不是动态执行的字符串的一部分,但它是"执行立即"的语法的一部分。声明
https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm