如何在PL / SQL中运行动态选择

时间:2014-02-07 10:59:58

标签: oracle plsql

请跟我一点

我想运行一个select语句,结果应该看起来就像我自己运行select我自己的结果应该是datagrid,而不是dbms_output?< / p>

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

3 个答案:

答案 0 :(得分:0)

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

sql_stmt2定义为VARCHAR2(200)。

我会说你的查询返回一个超过200个字符的字符串。

答案 1 :(得分:0)

1)您不需要动态SQL来执行您的第一个语句 - 所有标识符在执行时都是已知的。静态SQL,如

从query_table中选择查询,其中id = p_ds;

其中p_id是一个参数是相关的选择。

2)第8行指出表达式

使用id进入sql_stmt2 EXECUTE IMMEDIATE sql_stmt;

语法错误,INTO子句必须是第一个:

EXECUTE IMMEDIATE sql_stmt INTO sql_stmt2 USING ID;

请参阅Oracle文档: http://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems017.htm

要在您的问题中获得完整的答案,请在表格中提供真实的代码和数据示例。

答案 2 :(得分:-1)

你能试试吗

ids number;

ids :='5';