oracle - 如何使用 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;
解决方案
你不能做你正在尝试的事情,至少你正在尝试的方式。您已将过程定义为将记录结构作为输入变量,然后使用单个值调用它。那是您得到的错误类型错误。
但是,您可以重载包中的过程。
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;
推荐阅读
- c++ - 在整个继承链中复制构造
- html - 选择禁用时隐藏的箭头
- c++ - 为什么动态转换给出分段错误
- java - Hazelcast - 在固定时间段后从 IMap 中逐出条目,无论它更新多少次
- mysql - 按喜欢和不喜欢对评论进行排序
- apache - Hadoop 全序分区
- java - 针对 XSD 验证多个 XML 文件的最佳方法是什么?
- sql-server - 表未显示在 SQL Server Management Studio 和 Visual Studio 中
- android - 为什么这不能作为 Kotlin 中的返回类型?
- hazelcast - 当具有特定值的条目在 Hazelcast 上可用时如何获得通知?