2014-02-07 53 views
0

熊有點如何在PL/SQL和我一起運行動態選擇

我想運行一個select語句和結果應該完全一樣,如果我跑了select自己的結果應該是一個datagrid,而不是dbms_output

DECLARE 
    sql_stmt VARCHAR2(200); 
    sql_stmt2 VARCHAR2(200); 
    ids   VARCHAR2(200); 
BEGIN 
    ids := 5; 
    sql_stmt:='select query from query_table where id = :id'; 
    EXECUTE IMMEDIATE sql_stmt using ids into sql_stmt2; 
    EXECUTE IMMEDIATE sql_stmt2; 
END; 

但是這給了我一個

ORA-06502: PL/SQL: numeric or value error 
ORA-06512: at line 8 

8號線是

EXECUTE IMMEDIATE sql_stmt2 
+0

缺少終止';'? –

+0

ths egor,但我忘了補充一點;在上面的問題中,我確實收到了錯誤並添加了;因此之後ora-06502錯誤發生 – user3283478

+4

在執行之前打印查詢'sql_stmt2'。 –

回答

-1

你可以嘗試

ids number; 

ids :='5'; 
0

我的第8行是EXECUTE IMMEDIATE sql_stmt using ids into sql_stmt2;

sql_stmt2被定義爲VARCHAR2(200)。

我想說你的查詢返回一個字符串超過200個字符。

0

1)您不需要動態SQL來執行您的第一條語句 - 所有標識符在執行時都是已知的。靜態SQL如

從query_table中選擇查詢,其中id = p_ds;

其中p_id是一個參數是相關的選擇。

2)第8行點的表達

EXECUTE使用IDS成sql_stmt2 IMMEDIATE sql_stmt;

其具有錯誤的語法,INTO子句必須是第一個:

EXECUTE IMMEDIATE sql_stmt INTO sql_stmt2使用IDS的;

請參閱Oracle文檔請: http://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems017.htm

要得到完整的答案在你的問題請提供您的表中的實際代碼和數據的例子。