首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用%ROWTYPE获取真正的签名

如何使用%ROWTYPE获取真正的签名
EN

Stack Overflow用户
提问于 2016-04-14 19:54:57
回答 2查看 452关注 0票数 7

如何获得使用%ROWTYPE参数的PLSQL过程的真实签名?

例如:

代码语言:javascript
复制
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;

提供:

代码语言:javascript
复制
> 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.

因此,在ALL_ARGUMENTS中,'INPUT_SAMPLE‘显示为'PL/SQL’,没有任何到'samples%ROWTYPE‘的链接。并且在DBA_PLSQL_TYPES中没有这种类型的踪迹。

如何在此表单下获取此过程的声明类型?

代码语言:javascript
复制
GETSAMPLE  INPUT_SAMPLE IN  SAMPLES%ROWTYPE
EN

回答 2

Stack Overflow用户

发布于 2016-07-18 22:36:50

我可以建议换一种方式:

1)创建具有表中所需所有属性的对象类型

2)创建您自己类型的对象表

3)将参数传递给您的类型的过程

4)可以从all_arguments获取类型名

%rowtype%type是编译期间动态解析的伪类型。那么,在这种情况下,您希望在data_dictionary信息中看到什么?没有与样本%rowtype相关的命名记录/类型/对象。

票数 1
EN

Stack Overflow用户

发布于 2016-04-15 00:05:22

我查了字典,什么也没找到。如果没有信息(我不知道),您可以使用如下内容:

代码语言:javascript
复制
SELECT b.object_name,b.argument_name, REGEXP_SUBSTR (UPPER (text),'([^{ ,(;}]+)%ROWTYPE') tadaaa
  FROM user_source a
       JOIN (SELECT package_name, object_name, argument_name, in_out, data_level, position, data_type
               FROM user_arguments x
              WHERE data_type = 'PL/SQL RECORD' AND package_name = 'USE_SAMPLES' AND object_name = 'GETSAMPLE' ) b
          ON a.name = b.package_name
 WHERE a.TYPE = 'PACKAGE BODY' 
   AND UPPER (text) LIKE '%\%ROWTYPE%' ESCAPE '\'
   AND UPPER (text) LIKE '%'||UPPER(ARGUMENT_NAME)||'%'    

:)让一些正则表达式中的专家检查我的正则表达式。实际上,参数名也必须在regex中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36622298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档