Cách lấy chữ ký thực cho quy trình PLSQL sử dụng các đối số% ROWTYPE?Cách nhận chữ ký thực bằng% ROWTYPE
Ví dụ:
clear screen;
prompt > Table creation to support %ROWTYPE
create table samples (
id number,
code varchar2(15),
lib varchar2(200));
prompt > Package witch use %ROWTYPE
create or replace package use_samples as
procedure getSample(input_sample samples%ROWTYPE);
end use_samples;
/
prompt > Package BODY witch use %ROWTYPE
create or replace package body use_samples as
procedure getSample(input_sample IN samples%ROWTYPE) is
ex samples%ROWTYPE;
begin
select * into ex from samples where samples.code = input_sample.code;
end getSample;
end use_samples;
/
prompt > Proc arguments by ALL_ARGUMENTS
set pagesize 50000
set linesize 2000
set verify off
CLEAR COLUMNS;
COLUMN object_name HEADING "PROC" FORMAT A30 JUSTIFY LEFT;
COLUMN argument_name HEADING "ARGUMENT_NAME" FORMAT A30 JUSTIFY LEFT;
select object_name, argument_name, in_out, data_level, position, data_type
from all_arguments
where owner = USER
and package_name = 'USE_SAMPLES'
and object_name = 'GETSAMPLE';
prompt >> Argument 'INPUT_SAMPLE' is shown as 'PL/SQL RECORD' without any link to 'samples%ROWTYPE'
prompt > PLSQL types declared
select *
from DBA_PLSQL_TYPES
where owner = USER
and package_name = 'USE_SAMPLES';
prompt >> There is no declared type because we use directly a %ROWTYPE argument
prompt > Clean up
drop package use_samples;
drop table samples;
cho:
> Table creation to support %ROWTYPE
Table SAMPLES created.
> Package witch use %ROWTYPE
Package USE_SAMPLES compiled
> Package BODY witch use %ROWTYPE
Package body USE_SAMPLES compiled
> Proc arguments by ALL_ARGUMENTS
columns cleared
PROC ARGUMENT_NAME IN_OUT DATA_LEVEL POSITION DATA_TYPE
------------------------------ ------------------------------ --------- ---------- ---------- ------------------------------
GETSAMPLE INPUT_SAMPLE IN 0 1 PL/SQL RECORD
GETSAMPLE ID IN 1 1 NUMBER
GETSAMPLE CODE IN 1 2 VARCHAR2
GETSAMPLE LIB IN 1 3 VARCHAR2
>> Argument 'INPUT_SAMPLE' is shown as 'PL/SQL RECORD' without any link to 'samples%ROWTYPE'
> PLSQL types declared
no rows selected
>> There is no declared type because we use directly a %ROWTYPE argument
> Clean up
Package USE_SAMPLES dropped.
Table SAMPLES dropped.
Vì vậy, với ALL_ARGUMENTS, 'INPUT_SAMPLE' được hiển thị như 'PL/SQL RECORD' mà không cần bất kỳ liên kết để 'mẫu ROWTYPE%'. Và không có dấu vết nào của loại này trong DBA_PLSQL_TYPES.
Tôi làm cách nào để nhận loại khai báo của quy trình này theo biểu mẫu này?
GETSAMPLE INPUT_SAMPLE IN SAMPLES%ROWTYPE
tôi giả sử, ý tưởng này sẽ hoạt động nếu tất cả các gói sẽ hoạt động theo kiểu bê tông. Trong trường hợp khác, chúng tôi không thể hỗ trợ tất cả các tùy chọn có thể –
Tôi sẽ không đặt nó thực sự là câu trả lời, nhưng mã trông khủng khiếp trong các nhận xét. – Mottor
Điều này thực sự chỉ làm việc cho các trường hợp sử dụng đơn giản nhất. Ví dụ. 1) toán tử '% ROWTYPE' có thể được đặt trên một dòng mới, 2) bảng có thể là một từ đồng nghĩa/đủ điều kiện từ lược đồ khác, 3)'% ROWTYPE' có thể là một loại 'RECORD' lồng nhau trong một' RECORD khác ', v.v. –