Oracle
 sql >> база данни >  >> RDS >> Oracle

показва набор от резултати от съхранена процедура на oracle 10g

Има ли грешка, която виждате, когато изпълните тази процедура или я стартирате в SQLPLUS? Можете ли да публикувате вашата sqlplus сесия такава, каквато е?

PRINT е специфична за sqlplus команда и не може да бъде извикана вътре в процедурния блок. Ако трябва да отпечатате резултатите от рекурсор вътре в процедура, тогава ще трябва да извлечете от него и да отпечатате всеки запис във формата, от който се нуждаете.

SQL> create or replace procedure test_REFCURSOR (
  2     i_number in number,
  3     o_cursor out sys_refcursor) 
  4  as
  5  begin
  6     open o_cursor for
  7        'select empno, ename from emp
  8             where rownum < ' || i_number ;
  9  end;
 10  /

Procedure created.

SQL> variable rc refcursor;
SQL> exec test_refcursor(5, :rc);

PL/SQL procedure successfully completed.

SQL> print rc;

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES

Трябва също така да промените вашата процедура (или) извикването на процедурата, за да имате различни имена на променливи. Общо взето, поставям пред всички входни променливи "i_" и всички изходни променливи с "o_". По този начин декларацията на вашата процедура ще изглежда така..

CREATE OR REPLACE PROCEDURE IFSINFO.SHORTAGE_SHEET (i_Site     IN VARCHAR2,
                                                    i_Buyer    IN VARCHAR2,
                                                    i_Supplier IN VARCHAR2,
                                                    o_Cursor   OUT SYS_REFCURSOR) AS ....

и извикването на процедурата ще бъде..

IFSINFO.SHORTAGE_SHEET(    i_site     => vsite,
                           i_buyer    => vbuyer,
                           i_supplier => vsupplier,
                           o_cursor   => vcursor);

Не е необходимо да използвате ":" в началото за тези променливи, тъй като те не са променливи на хост средата (това е случаят с второто ви изпълнение с помощта на SQLPLUS, където използвате sqlplus променливата "rc" в извикването на процедура)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка ORA-00932 при използване на избор с полета за съюз и CLOB

  2. ORA-03113:край на файла на комуникационния канал след дълго бездействие в приложението ASP.Net

  3. Как мога да създам формуляр за вмъкване/актуализация за множество таблици в Oracle Apex 5.1.4

  4. CONNECT BY или йерархични заявки в RDBMS, различни от Oracle

  5. Създаване на асоциативен масив на ниво пакет в java