Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Como passar um parâmetro do tipo 'Nested Table' para uma stored procedure no Oracle?

user3876153Dec 4 2015 — edited Dec 4 2015

Estou trabalhando com Oracle a pouco mais de 2 meses e preciso passar um conjunto de dados para que seja utilizado no parâmetro da consulta dentro da procedure. Busquei muito na net e não encontrei nenhuma solução de resolva meu problema, sempre recebo a mesma mensagem de erro - número incorreto de tipos de argumentos na chamada.

Seguem os códigos e o retorno da execução da proccedure:

Código de Criação da Tabela:

CREATE TABLE MARCO.NOTA_FISCAL (
  NUMERO NUMBER(10,0) NOT NULL, 
  DAT_EMISSAO DATE NOT NULL  
)TABLESPACE "DADOS";

Código do Pacote:

CREATE OR REPLACE PACKAGE MARCO.PKG_CONTABIL AS
  TYPE T_CURSOR IS REF CURSOR;
  TYPE T_NUMBER_TABLE IS TABLE OF NUMBER(10,0);

  PROCEDURE SP_NOTA_FISCAL_BY_NUMERO_SEL
    (VNOTAS IN T_NUMBER_TABLE,
    VCURSOR OUT T_CURSOR);

END PKG_CONTABIL;
\
CREATE OR REPLACE PACKAGE BODY MARCO.PKG_CONTABIL AS
  PROCEDURE SP_NOTA_FISCAL_BY_NUMERO_SEL
    (VNOTAS IN T_NUMBER_TABLE,
    VCURSOR OUT T_CURSOR) IS
  BEGIN
    OPEN VCURSOR FOR
      SELECT
        A.NUMERO,
        A.DAT_EMISSAO
      FROM MARCO.NOTA_FISCAL A WHERE A.NUMERO
      IN (SELECT column_value FROM table(VNOTAS));
  END SP_NOTA_FISCAL_BY_NUMERO_SEL;

END PKG_CONTABIL;

Código da consulta:

DECLARE
  TYPE T_NUMBER_TABLE IS TABLE OF NUMBER(10,0);
  TYPE T_RESULT IS REF CURSOR;
  notas T_NUMBER_TABLE := T_NUMBER_TABLE(32222,232322);
  res T_RESULT;
  c_numero NUMBER(10,0);
  c_data DATE;
BEGIN
  MARCO.PKG_CONTABIL.SP_NOTA_FISCAL_BY_NUMERO_SEL(notas, res);
  LOOP
    FETCH res INTO c_numero, c_data;
    EXIT WHEN res%NOTFOUND;
    dbms_output.put_line(c_numero);
  END LOOP;
END;

Retorno da Consulta:

Relatório de erros -
ORA-06550: linha 9, coluna 3:
PLS-00306: número incorreto de tipos de argumentos na chamada para 'SP_NOTA_FISCAL_BY_NUMERO_SEL'
ORA-06550: linha 9, coluna 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jan 1 2016
Added on Dec 4 2015
4 comments
1,351 views