首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态SQL / PL/SQL

动态SQL / PL/SQL
EN

Stack Overflow用户
提问于 2014-01-12 18:08:35
回答 2查看 127关注 0票数 0

我遇到了动态SQL的麻烦,我希望能够显示department_id:

代码语言:javascript
运行
复制
CREATE OR REPLACE PROCEDURE pro_two_tables
    (p_input VARCHAR2) IS
     v_department_id employees.department_id%TYPE;

BEGIN
    EXECUTE IMMEDIATE
       'SELECT department_id
    /* MYSTERY FOR ME */
           FROM ' || p_input || '
              WHERE manager_id = 205';
DBMS_OUTPUT.PUT_LINE('You selected ID from the table' || ' ' || p_input || ' ' || 'ID   is' ||' ' || v_department_id);

EXCEPTION
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('No data found');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(' I petty the fool who wrote this');
END; 

我似乎不明白如何在这个程序中使用"INTO“条款。我正在阅读这个问题,并做一些“测试”,尽管我相信如果有人能向我解释这一点,那将是很有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-12 20:26:11

INTO位于立即执行的后面,如

代码语言:javascript
运行
复制
declare
    foo number;
    bar number;

begin
    execute immediate 'select 1,2 from dual' into foo, bar;
    dbms_output.put_line(foo ||','||bar);
end;
/

这些指纹:

代码语言:javascript
运行
复制
1,2

请注意,如果您发现自己使用了动态SQL,那么检查您的设计通常是个好主意。

票数 1
EN

Stack Overflow用户

发布于 2014-12-05 14:14:11

代码语言:javascript
运行
复制
CREATE OR REPLACE PROCEDURE pro_two_tables (i_table_name VARCHAR2)
IS
   v_record_id     NUMBER;
   v_record_name   VARCHAR2 (500) := 'Name Record'; -- Insert your Name Value
   sql_stmt        VARCHAR2 (500);
BEGIN
   sql_stmt :=
      'SELECT id
           FROM ' || i_table_name || ' WHERE name = :1';

   EXECUTE IMMEDIATE sql_stmt INTO   v_record_id USING v_record_name;

   DBMS_OUTPUT.PUT_LINE(   'You selected ID from the table'
                        || ' '
                        || i_table_name
                        || ' '
                        || 'ID   is'
                        || ' '
                        || v_record_id);
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      DBMS_OUTPUT.PUT_LINE ('No data found');
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.PUT_LINE (' I petty the fool who wrote this');
END;

对于立即执行,您可以使用:

  1. 输入为返回,单个值为多个值。
  2. 使用用于替换查询语句中的绑定变量,在sql中放置格式: name_field
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21078369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档