2016-12-13 38 views
0

嗨那裏我試圖建立一個函數來重置一個序列,以同步與序列不同步的表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: missing expression
ORA-06512: at "PSALERT_ADMIN.P_FNC_SEQUENCERESET", line 16
ORA-06512: at line 11

回答

1

那就需要看的東西像這樣:

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

關鍵字「into」不是動態執行的字符串的一部分,但它是「execute immediate」語句的一部分語法

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

+0

我錯過了SELECT Max('|| ||)。元素來自原始帖子。但你的答案仍然存在。非常感激。 –

+0

@PaulJohnson我從問題中複製了選擇 - 是否可以編輯問題?否則這只是爲了促進周到的閱讀;-) – sers