取出字段的类型与长度

-- 有待修改
DROP TYPE FieldInfo_TYPE_TABLE
/


DROP TYPE FieldInfo_TYPE
/

CREATE OR REPLACE TYPE FieldInfo_TYPE AS OBJECT(
       table_name          VARCHAR2(150), -- table owner & table name
       column_name         VARCHAR2(100),
       data_type           VARCHAR2(10),
       data_length         NUMBER(9),
       data_precision      NUMBER(2),
       data_scale          NUMBER(2)
)
/

CREATE OR REPLACE TYPE FieldInfo_TYPE_TABLE AS TABLE OF FieldInfo_TYPE
/
CREATE OR REPLACE FUNCTION getFieldInfo_Func( inp_tableSynonymName IN VARCHAR2,
                                              inp_fieldName        IN VARCHAR2
                                              )
RETURN FieldInfo_TYPE_TABLE

PIPELINED AS

       CURSOR getFieldInfo_Cur( lv_tableSynonymName IN VARCHAR2,
                                lv_fieldName        IN VARCHAR2) IS
          SELECT  atc.owner||'.'||atc.table_name tableName,
                  atc.column_name,
                  atc.data_type,
                  atc.data_length,
                  atc.data_precision,
                  atc.data_scale
          FROM    ALL_TAB_COLS atc
          WHERE   EXISTS (
                  SELECT 1
                  FROM   all_synonyms allsyno
                  WHERE  allsyno.table_name = atc.table_name
                  AND    allsyno.table_owner = atc.owner
                  AND     synonym_name = nvl(lv_tableSynonymName,synonym_name)
                  AND     atc.COLUMN_NAME = nvl(lv_fieldName,atc.COLUMN_NAME) 
          );
         
         
          v_tableSynonymName VARCHAR2(100);
          v_fieldName        VARCHAR2(100);

BEGIN
     v_tableSynonymName := TRIM(inp_tableSynonymName);
     v_fieldName        := TRIM(inp_fieldName);
    
     FOR c IN getFieldInfo_Cur(v_tableSynonymName,v_fieldName) LOOP
        
         PIPE ROW(
              FieldInfo_TYPE(
                             c.tableName,
                             c.column_name,
                             c.data_type,
                             c.data_length,
                             c.data_precision,
                             c.data_scale
              )
         );

     END LOOP;

END getFieldInfo_Func;
/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值