Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在oracle中选择查询字符串_Sql_Database_Oracle_Plsql_Oracle10g - Fatal编程技术网

Sql 如何在oracle中选择查询字符串

Sql 如何在oracle中选择查询字符串,sql,database,oracle,plsql,oracle10g,Sql,Database,Oracle,Plsql,Oracle10g,让我们假设,我有一个保存查询字符串的字符串 如何在oracle中从该查询字符串中选择行 我尝试了执行立即,但它没有返回任何结果 declare hello varchar(30000); begin hello:='select * from test_table'; execute immediate hello; end; 您可以使用动态光标 下面是一个使用SQL*Plus的示例: SQL> var dyn_cur refcursor SQL>

让我们假设,我有一个保存查询字符串的字符串

如何在oracle中从该查询字符串中选择行

我尝试了执行立即,但它没有返回任何结果

declare 
    hello varchar(30000);
begin
    hello:='select * from test_table';
    execute immediate hello;    
end;

您可以使用动态光标

下面是一个使用
SQL*Plus
的示例:

SQL> var dyn_cur refcursor
SQL> DECLARE
  2     l_sql_query VARCHAR2(1000);
  3  BEGIN
  4     -- complex function that returns a query:
  5     l_sql_query := 'SELECT 1, dummy FROM dual';
  6     OPEN :dyn_cur FOR l_sql_query;
  7  END;
  8  /

PL/SQL procedure successfully completed.

SQL> print dyn_cur

         1 DUM
---------- ---
         1 X
您可以在PL/SQL过程和包中使用动态游标:

SQL> CREATE OR REPLACE PROCEDURE prc_dyn_cur(p_dyn_cursor OUT SYS_REFCURSOR) IS
  2  BEGIN
  3     OPEN p_dyn_cursor FOR 'SELECT 1, dummy FROM dual';
  4  END;
  5  /

Procedure created.

SQL> exec prc_dyn_cur(:dyn_cur);

PL/SQL procedure successfully completed.

SQL> print dyn_cur

         1 DUM
---------- ---
         1 X

您可以使用动态光标

下面是一个使用
SQL*Plus
的示例:

SQL> var dyn_cur refcursor
SQL> DECLARE
  2     l_sql_query VARCHAR2(1000);
  3  BEGIN
  4     -- complex function that returns a query:
  5     l_sql_query := 'SELECT 1, dummy FROM dual';
  6     OPEN :dyn_cur FOR l_sql_query;
  7  END;
  8  /

PL/SQL procedure successfully completed.

SQL> print dyn_cur

         1 DUM
---------- ---
         1 X
您可以在PL/SQL过程和包中使用动态游标:

SQL> CREATE OR REPLACE PROCEDURE prc_dyn_cur(p_dyn_cursor OUT SYS_REFCURSOR) IS
  2  BEGIN
  3     OPEN p_dyn_cursor FOR 'SELECT 1, dummy FROM dual';
  4  END;
  5  /

Procedure created.

SQL> exec prc_dyn_cur(:dyn_cur);

PL/SQL procedure successfully completed.

SQL> print dyn_cur

         1 DUM
---------- ---
         1 X
请注意,此解决方案考虑到您知道要从哪个表中选择。 另外,我认为你应该描述一下你到底想要实现什么

CREATE OR REPLACE PROCEDURE query_executer (string_query IN VARCHAR)
IS
   c1 SYS_REFCURSOR;
   v_last_name employees.last_name%TYPE;    -- Selecting last_name
BEGIN
   OPEN c1 FOR string_query; -- Opening c1 for the select statement
   LOOP
      FETCH c1 INTO v_last_name;
      DBMS_OUTPUT.put_line (v_last_name);
      EXIT WHEN (C1%NOTFOUND);
   END LOOP;
END;

SET SERVEROUTPUT ON
EXECUTE query_executer('select last_name from employees');
请注意,此解决方案考虑到您知道要从哪个表中选择。 另外,我认为你应该描述一下你到底想要实现什么

CREATE OR REPLACE PROCEDURE query_executer (string_query IN VARCHAR)
IS
   c1 SYS_REFCURSOR;
   v_last_name employees.last_name%TYPE;    -- Selecting last_name
BEGIN
   OPEN c1 FOR string_query; -- Opening c1 for the select statement
   LOOP
      FETCH c1 INTO v_last_name;
      DBMS_OUTPUT.put_line (v_last_name);
      EXIT WHEN (C1%NOTFOUND);
   END LOOP;
END;

SET SERVEROUTPUT ON
EXECUTE query_executer('select last_name from employees');
输出

Procedure created.
Abel
Ande
Atkinso
PL/SQL procedure successfully completed.
输出

Procedure created.
Abel
Ande
Atkinso
PL/SQL procedure successfully completed.

首先,你要尽量避免做那样的事情。首先,你要尽量避免做那样的事情。@hsuk,为什么不做这样的事情@hsuk,为什么不做这样的事情