当前位置: 首页 > 面试题库 >

立即在plsql中执行

翟修明
2023-03-14
问题内容

如何从此代码获得结果

EXECUTE IMMEDIATE 'SELECT * FROM ' || table_name

通过 for循环

通常的方法是这样的

for items in (select * from this_table)
loop
htp.p(items.id);
end loop;

问题答案:

如果您 确实 需要select * from 动态表名 ,那么我可能会选择dbms_sql

记录 类型:

create type tq84_varchar2_tab as table of varchar2(4000);
/

结果集的 类型(它是一个 记录 数组):

create type tq84_varchar2_tab_tab as table of tq84_varchar2_tab;
/

执行选择并返回 结果集 实例的函数:

create or replace function tq84_select_star_from_table(table_name in varchar2) 
    return tq84_varchar2_tab_tab
as
    stmt_txt     varchar2(4000);
    cur          number;
    columns_desc dbms_sql.desc_tab;
    column_cnt   number;

    result_set   tq84_varchar2_tab_tab;

begin

    stmt_txt := 'select * from ' || table_name;

    cur := dbms_sql.open_cursor;

    dbms_sql.parse(cur, stmt_txt, dbms_sql.native);
    dbms_sql.describe_columns(cur, column_cnt, columns_desc);
    dbms_sql.close_cursor(cur);


    stmt_txt := 'select tq84_varchar2_tab(';

    for i in 1 .. column_cnt loop

        if i != 1 then
           stmt_txt := stmt_txt || ',';
        end if;

        stmt_txt := stmt_txt || columns_desc(i).col_name;

    end loop;

    stmt_txt := stmt_txt || ') from ' || table_name;

--  dbms_output.put_line(stmt_txt);

    execute immediate stmt_txt 
    bulk collect into result_set;

    return result_set;


end tq84_select_star_from_table;

然后,该函数可以与类似的东西一起使用:

declare
  records   tq84_varchar2_tab_tab;
begin

  records := tq84_select_star_from_table('user_objects');

  for i in 1 .. records.count loop
      dbms_output.put_line (records(i)(5) || ': ' || records(i)(1));
  end loop;

end;
/


 类似资料:
  • 我在下面的查询中遇到了一个错误,它给出了一个符号(在使用循环的行中)。我正在尝试开发一个函数,该函数将动态参数作为表名、列名、表id,并用于其他表。

  • 问题内容: 和之间有什么区别 ? 问题答案: 从根本上说,它们执行相同的操作,这是提供一种在PL / SQL中执行DDL语句的机制,这是本机不支持的。如果内存对我有用,那么在Oracle 7版本的DBMS_UTILITY软件包中可以使用EXEC_DDL_STATEMENT,而在8中仅引入本机动态SQL(EXECUTE IMMEDIATE)。 有一些区别。EXECUTEIMMEDIATE主要是关于执

  • 嗨,我正在使用Spring AOP进行日志记录,我有以下两个方面@before和@afterreturn,不幸的是,这两个方面都打印相同的响应,这里的期望是@before打印方法输入和@afterreturning打印方法输出。

  • 问题内容: 在JavaScript中,您可以定义立即执行的匿名函数: 您可以在PHP中做类似的事情吗? 问题答案: 对于PHP7:请参阅OhgakiYasuo的答案: 对于以前的版本:我能想到的立即执行它们的唯一方法是

  • 我有这样一个PL/SQL块: 此块需要使用Oracle JDBC执行。我尝试过以下方法: > 尝试使用语句对象执行此操作。因为这是一个块,所以出现了一个异常,说这不是一个sql语句 这可以分成sql语句,但是我有100个这样的块,这对代码来说很麻烦,我想把这个留给sqlplus。 尝试使用Callable语句,但不能正常工作。 任何解决方案都会有帮助。

  • 我有一个方法: 所以它每5分钟运行一次。 是否可以计划一个方法在第一次立即运行,然后根据cron运行?