Oracle 如何将查询参数传递给过程?

Oracle 如何将查询参数传递给过程?,oracle,plsql,oracle-apex,Oracle,Plsql,Oracle Apex,我需要将单元格、A_ID、TBL作为参数添加到上述过程中。我不确定类型和语法 澄清: 对于不同的表、不同的列,过程将被多次调用。主体是相同的,只是我提到的那些参数不同。您可以滥用动态SQL将表名作为参数传递给过程 让我们执行该过程并查看 SQL> CREATE OR REPLACE 2 PROCEDURE p( 3 table_name IN VARCHAR2) 4 AS 5 TYPE ref_typ 6 IS 7 REF 8 CU

我需要将单元格、A_ID、TBL作为参数添加到上述过程中。我不确定类型和语法

澄清:

对于不同的表、不同的列,过程将被多次调用。主体是相同的,只是我提到的那些参数不同。

您可以滥用动态SQL将表名作为参数传递给过程

让我们执行该过程并查看

SQL> CREATE OR REPLACE
  2  PROCEDURE p(
  3      table_name IN VARCHAR2)
  4  AS
  5  TYPE ref_typ
  6  IS
  7    REF
  8    CURSOR;
  9      var_ref ref_typ;
 10      emp_no NUMBER ;
 11    BEGIN
 12      OPEN var_ref FOR 'SELECT EMPNO FROM '||table_name;
 13      LOOP
 14        FETCH var_ref INTO emp_no ;
 15      EXIT
 16    WHEN var_ref%NOTFOUND;
 17      DBMS_OUTPUT.PUT_LINE('empno --> '||emp_no);
 18    END LOOP;
 19    CLOSE var_ref;
 20  END;
 21  /

Procedure created.

添加单元格、a_id、tbl作为参数是什么意思?请使用问题下的链接进一步详细说明此问题。重复使用同一代码进行多次呼叫。我已经更新了我的问题。如果您需要在执行时决定表名和联接条件,您需要使用动态SQL,您可以使用DBMS|U SQL或EXECUTE|U IMMEDIATE以及类型。我如何修改上面的内容,查询“SELECT*FROM”| Table|U name,然后使用点访问每一列,例如rec.EMPNO?要获取的变量rec应该是什么类型?或者至少如何使用上述方法查询和获取多个列?您需要使用集合类型。搜索%ROWTYPE.ok,刚刚创建了行单元格%ROWTYPE,现在可以访问列了。感谢您的反馈。如果答案对你有帮助,那么请在答案上做标记。这将有助于其他寻找类似问题的人。
SQL> CREATE OR REPLACE
  2  PROCEDURE p(
  3      table_name IN VARCHAR2)
  4  AS
  5  TYPE ref_typ
  6  IS
  7    REF
  8    CURSOR;
  9      var_ref ref_typ;
 10      emp_no NUMBER ;
 11    BEGIN
 12      OPEN var_ref FOR 'SELECT EMPNO FROM '||table_name;
 13      LOOP
 14        FETCH var_ref INTO emp_no ;
 15      EXIT
 16    WHEN var_ref%NOTFOUND;
 17      DBMS_OUTPUT.PUT_LINE('empno --> '||emp_no);
 18    END LOOP;
 19    CLOSE var_ref;
 20  END;
 21  /

Procedure created.
SQL> set serveroutput on
SQL> BEGIN
  2     p('emp');
  3  END;
  4  /
empno --> 7369
empno --> 7499
empno --> 7521
empno --> 7566
empno --> 7654
empno --> 7698
empno --> 7782
empno --> 7788
empno --> 7839
empno --> 7844
empno --> 7876
empno --> 7900
empno --> 7902
empno --> 7934

PL/SQL procedure successfully completed.

SQL>