Sql 如何使用%ROWTYPE执行更新存储过程
如何使用%rowtype执行更新存储过程Sql 如何使用%ROWTYPE执行更新存储过程,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,如何使用%rowtype执行更新存储过程 PROCEDURE p_update ( p_id IN t.id%TYPE, p_row IN t%rowtype) IS BEGIN UPDATE t SET row = p_row WHERE id = p_id; END p_update; declare t_row t%rowtype; t_id t.id%type; begin t
PROCEDURE p_update (
p_id IN t.id%TYPE,
p_row IN t%rowtype)
IS
BEGIN
UPDATE t
SET
row = p_row
WHERE
id = p_id;
END p_update;
declare
t_row t%rowtype;
t_id t.id%type;
begin
t_row.name := 'TEST';
t_id := 10;
pck_api.p_update(t_row, t_id);
end;
我得到了PLS-00306错误的参数数量或类型您只需在存储过程的更新指令中添加
名称
列到您的行类型(p_行
)参数p_行。名称
,并在调用存储过程时更改参数顺序:
CREATE OR REPLACE PROCEDURE p_update (
p_id IN t.id%TYPE,
p_row IN t%rowtype)
IS
BEGIN
update t set name = p_row.name where id=p_id;
END;
/
Declare
t_row t%rowtype;
t_id t.id%type;
Begin
t_row.name := 'Test';
t_id := 10;
p_update(t_id,t_row);
End;
/
您只需在存储过程的更新语句中添加
name
列到rowtype(p\u row
)参数p\u row.name
,并在调用存储过程时更改参数顺序:
CREATE OR REPLACE PROCEDURE p_update (
p_id IN t.id%TYPE,
p_row IN t%rowtype)
IS
BEGIN
update t set name = p_row.name where id=p_id;
END;
/
Declare
t_row t%rowtype;
t_id t.id%type;
Begin
t_row.name := 'Test';
t_id := 10;
p_update(t_id,t_row);
End;
/
谢谢。但是,我想使用存储过程
p_update
是一个存储过程,你是什么意思?@WernfriedDomscheit我想,我已经修正了我的解释。现在工作正常了。但是,在过程中,我有一个用于更新所有列的update t set ROW
,如何避免这种情况,并保持set ROW
语句已经有where限制。你能用一个例子来详细说明一下吗@Pavloss04谢谢。但是,我想使用存储过程p_update
是一个存储过程,你是什么意思?@WernfriedDomscheit我想,我已经修正了我的解释。现在工作正常了。但是,在过程中,我有一个用于更新所有列的update t set ROW
,如何避免这种情况,并保持set ROW
语句已经有where限制。您能否以@Pavlos04为例详细说明您的过程接受id作为第一个参数,记录作为第二个参数,但是在匿名块中,您将记录作为第一个参数传递,将id作为第二个参数传递是,这是错误的。您的过程接受id作为第一个参数,将记录作为第二个参数传递,但是在匿名块中,您将记录作为第一个参数传递,将id作为第二个参数传递是,这是一个错误。