首页 > 解决方案 > 如何使用 TYPE RECORD 调用过程?

问题描述

我在一个包中做了一个数据插入过程,我想将它与 RECORD TYPE 一起使用,但我不知道该怎么称呼它。

我希望至少能够输入 'codigo' 其他值为 null

    CREATE TABLE TB_CRUD_MAC" 
( "K_CODIGO" NUMBER(10,0), 
"A_NUMNIT" VARCHAR2(11 BYTE),
 "N_NOMBRE" VARCHAR2(11 BYTE),
 "N_APELLI" VARCHAR2(11 BYTE),
 "F_FECHA" DATE,
 "I_ESTADO" VARCHAR2(1 BYTE),
 "K_CLASIF" VARCHAR2(1 BYTE) )
create or replace PACKAGE PK_CRUD_MAC AS
TYPE R_REGISTRO IS RECORD (
    codigo TB_CRUD_MAC.K_CODIGO%TYPE,
    numnit TB_CRUD_MAC.A_NUMNIT%TYPE,
    nombre TB_CRUD_MAC.N_NOMBRE%TYPE,
    apelli TB_CRUD_MAC.N_APELLI%TYPE,
    fecha TB_CRUD_MAC.F_FECHA%TYPE,
    estado TB_CRUD_MAC.I_ESTADO%TYPE,
    clasif TB_CRUD_MAC.K_CLASIF%TYPE
    );

PROCEDURE PR_INSERT_REGISTRO (P_R_REGISTRO R_REGISTRO);

END;

create or replace PACKAGE BODY PK_CRUD_MAC AS

    PROCEDURE PR_INSERT_REGISTRO (P_R_REGISTRO R_REGISTRO)
      IS   
      BEGIN
       INSERT INTO TB_CRUD_MAC VALUES P_R_REGISTRO;
      END;
END;

标签: oracleplsql

解决方案


不能做你正在尝试的事情,至少你正在尝试的方式。您已将过程定义为将记录结构作为输入变量,然后使用单个值调用它。那是您得到的错误类型错误。
但是,您可以重载包中的过程。

create or replace package pk_crud_mac as
type r_registro is record (
    codigo tb_crud_mac.k_codigo%type,
    numnit tb_crud_mac.a_numnit%type,
    nombre tb_crud_mac.n_nombre%type,
    apelli tb_crud_mac.n_apelli%type,
    fecha tb_crud_mac.f_fecha%type,
    estado tb_crud_mac.i_estado%type,
    clasif tb_crud_mac.k_clasif%type
    );

procedure pr_insert_registro (p_r_registro r_registro);
procedure pr_insert_registro (codigo tb_crud_mac.k_codigo%type);
end;

create or replace package body pk_crud_mac as
    procedure pr_insert_registro (p_r_registro r_registro)
      is   
      begin
       insert into tb_crud_mac values p_r_registro;
      end;

    procedure pr_insert_registro (p_codigo tb_crud_mac.k_codigo%type)
      is   
      begin
       insert into tb_crud_mac values (p_codigo);
      end;    
end;

推荐阅读