让我们定义一个函数
create or replace function GET_SOME_CURSOR(X number) return sys_refcursor is
R sys_refcursor;
begin
open R for
select * from MY_TABLE T where T.RATING = X;
return R;
end;
假设我们不知道MY_TABLE列的名称(除了RATING之外)。 请告诉我如何解决以下任务。也许它看起来毫无意义,但我希望你的解决方案 将向我展示我需要了解的PL / SQL的一些方面。
编写一个循环中的函数(对于x = 1到10)从GET_SOME_CURSOR(x)获取另一个refcursor
如果在refcursor结果集中不存在名为TITLE
的列,则返回NULL,
否则查找结果集中的所有行,其中包含子字符串' ABC'在TITLE
列中
放入一个数组(或任何你想要的)并返回这个数组。
答案 0 :(得分:2)
这个应该提供所需的信息
DECLARE
r SYS_REFCURSOR;
cur INTEGER;
col_tab DBMS_SQL.DESC_TAB;
col_cnt INTEGER;
BEGIN
OPEN r FOR
select * from MY_TABLE T where T.RATING = X;
cur := DBMS_SQL.TO_CURSOR_NUMBER(rc);
DBMS_SQL.DESCRIBE_COLUMNS(cur, col_cnt, col_tab);
FOR i IN 1..col_cnt LOOP
DBMS_OUTPUT.PUT_LINE('Column '||i||': '||col_tab(i).col_name
||' Data type is: '||col_tab(i).col_type );
END LOOP;
CLOSE r;
END;
从col_type
号码转换为您通过此查询获得的可读数据类型字符串:
SELECT text
FROM all_source
WHERE owner = 'SYS'
AND NAME = 'DBMS_TYPES'
AND TYPE = 'PACKAGE'
AND REGEXP_LIKE(text, 'TYPECODE');