PL/SQL中 输出列名和对应值。新手请教。
发布网友
发布时间:2023-09-06 11:33
我来回答
共2个回答
热心网友
时间:2024-12-02 17:35
--很奇怪是下面from为什么不能用参数tablename?会报错
select colname into colValue from table1 where hashcode='0004193ebc123a54bbba3dd9d54de5f3';
这个from后面不能使用tablename参数很正常,因为你传进来的tablename是一个字符串,而不是一张表,所以是无法将tablename直接这么放到from 后边的 ,还有上面语句,colname本身是你从数据字典表中选到的变量名,也是一个字符型,相当于select '1' into colvalue from table1,这样的colvalue结果一定是'1',而不是colname这个列对应的值。因为colname已经成了字符型了。
应该使用execute immediate来执行。
最终语法修改如下:
declare
tablename varchar2(100):='TABLE1';
colname varchar2(100);
colValue varchar2(500);
selectsql varchar2(200);
--返回表中所有列名
cursor cursor_colname is select column_name as cname from user_tab_columns where table_name=tablename;
begin
open cursor_colname;
LOOP
fetch cursor_colname into colname;
--很奇怪是下面from为什么不能用参数tablename?会报错
selectsql := ' select ' || colname || ' from ' || tablename || ' where hashcode = ''0004193ebc123a54bbba3dd9d54de5f3''';
execute immediate selectsql into colValue;
exit when cursor_colname%notfound;
dbms_output.put_line(colname||'='||colValue);
end loop;
close cursor_colname;
end;
热心网友
时间:2024-12-02 17:35
创建返回结果集的函数
SQL> create or replace package pkg_HelloWorld as
2 -- 定义ref cursor类型
3 type myrctype is ref cursor;
4 --函数申明
5 function getHelloWorld return myrctype;
6 end pkg_HelloWorld;
7 /
Package created.
SQL> CREATE OR REPLACE package body pkg_HelloWorld as
2 function getHelloWorld return myrctype
3 IS
4 return_cursor myrctype;
5 BEGIN
6 OPEN return_cursor FOR 'SELECT ''Hello'' AS a, ''World'' AS B FROM al';
7 return return_cursor;
8 END getHelloWorld;
9 end pkg_HelloWorld;
10 /
Package body created.
SQL> SELECT pkg_HelloWorld.getHelloWorld FROM al;
GETHELLOWORLD
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
A B
---------- ----------
Hello World
参考资料:http://hi.baidu.com/wangqing999/blog/item/f23e99274a099c40925807bf.html