简体   繁体   English

在Oracle SQL过程中执行表中的SQL语句

[英]Execute the SQL statements from table within an Oracle SQL procedure

I'm a newbie in PL/SQL and I'm struggling with following issue. 我是PL / SQL的新手,我正在努力解决以下问题。 I'm looking for an answer for 4 hours and it's still not working... 我正在寻找一个4小时的答案,它仍然无法正常工作......

I've got above 300 records in a table with SQL statements and my goal is to write a procedure that is able to loop over them under some conditions. 我在一个包含SQL语句的表中获得了300条以上的记录, 我的目标是编写一个能够在某些条件下循环它们的过程 I'd like also to check which queries passed and which ones failed. 我还想检查哪些查询通过,哪些查询失败。

So it goes like this (list of steps/pseudocode): 所以它就像这样(步骤列表/伪代码):

  • procedure or function that takes a condition as a parameter 条件作为参数的过程或函数
  • iterates over records that match a condition 迭代匹配条件的记录
  • executes SQL statements which fit match 执行适合匹配的SQL语句
  • gives an information of success or failure of execution 提供执行成功或失败的信息

I was trying to do something like this (below) but I think it's not correct - because I'm not looping over records. 我试图做这样的事情(下面),但我认为这不正确 - 因为我没有循环记录。

DECLARE
   sql_stmt    VARCHAR2(3000);

BEGIN
   sql_stmt := 'SELECT testcase_sql
                FROM data_audit_testcase_v2
                WHERE testcase_desc LIKE ''Test 6 - EM%''';
   dbms_output.put_line('Sth: ' || sql_stmt);
   EXECUTE IMMEDIATE sql_stmt ;
END;

I'm thinking about adjusting this code to my issue: 我正在考虑将此代码调整为我的问题:

FOR q IN (SELECT sql_text FROM query_table)
LOOP
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
     INTO some_local_variable;
  <<do something with the local variable>>
END LOOP;

source here 来源于此

What do you guys think? 你们有什么感想?

Thank you for your help in advance, 提前谢谢你的帮助,

Arthur 亚瑟

You have to do it like this: 你必须这样做:

DECLARE
   sql_stmt    VARCHAR2(3000);
    cur SYS_REFCURSOR;
    some_local_variable data_audit_testcase_v2.testcase_sql%TYPE;
BEGIN
   sql_stmt := 'SELECT testcase_sql
                FROM data_audit_testcase_v2
                WHERE testcase_desc LIKE :val';
   DBMS_OUTPUT.PUT_LINE('Sth: ' || sql_stmt);
    OPEN cur FOR sql_stmt USING 'Test 6 - EM%';
    LOOP
        FETCH cur INTO some_local_variable;     
        EXIT WHEN cur%NOTFOUND;
        <<do something with the local variable>>
    END LOOP;
    CLOSE cur;
END;

我找到了解决方案 - 我在SELECT中添加了第二个参数,所以PUT_LINE不知道如何显示它:)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM