免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2755 | 回复: 11
打印 上一主题 下一主题

隐形记录 如何引用记录的值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-28 18:07 |只看该作者 |倒序浏览
1. 声明   
    record    table%rowtype;

不查表 即不知道 table的列名 , 如何输出record的值
如 record.column_name  值

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
2 [报告]
发表于 2010-01-28 19:40 |只看该作者
这个不是矛盾的么,不知道列名,你咋知道自己要取的是什么列的值啊?

如果你想知道这张表有哪些字段,可以查询user_tab_columns视图

论坛徽章:
0
3 [报告]
发表于 2010-01-28 20:26 |只看该作者

回复 #2 Minsic 的帖子

不知道列名 如何输出记录

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
4 [报告]
发表于 2010-01-29 09:20 |只看该作者

回复 #3 llslls_007 的帖子

还是不明白你的意思。

想知道一个表有哪些字段不是有很多方法么?上面说的,查询user_tab_columns是个办法,如果用sqlplus,desc命令也可以知道大致的表结构。

论坛徽章:
0
5 [报告]
发表于 2010-01-29 09:35 |只看该作者

回复 #4 Minsic 的帖子

不好意思 我的需求是 :
给一个table, 表名为参数 ,让它竖排显示数据
table (col1,col2,col3) :

col1   value1
col2   value2
col3   value3

由于表名是参数,因此 表中的列也是不知道的,如何实现呢?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
6 [报告]
发表于 2010-01-29 12:42 |只看该作者
是这个意思吗?

SQL> set serveroutput on
SQL> select * from test_table;

      COL1       COL2       COL3
---------- ---------- ----------
         1          2          3

SQL> declare
  2  v_sql varchar2(100);
  3  v_col_value number;
  4  cursor col_cur is select column_name from user_tab_columns where table_name='TEST' order by column_id;
  5  begin
  6    for i in col_cur loop
  7      v_sql:='select '||i.column_name||' from test';
  8      execute immediate v_sql into v_col_value;
  9      dbms_output.put_line(i.column_name||' '||v_col_value);
10    end loop;
11  end;
12  /
COL1 1
COL2 2
COL3 3

PL/SQL procedure successfully completed.

SQL>

[ 本帖最后由 Minsic 于 2010-1-29 12:43 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2010-01-29 12:58 |只看该作者
刚才谁在问数据字典来着,这里有个活生生的例子啊,哈哈

论坛徽章:
0
8 [报告]
发表于 2010-01-29 13:13 |只看该作者

回复 #6 Minsic 的帖子

3qu very much

论坛徽章:
0
9 [报告]
发表于 2010-01-29 13:21 |只看该作者

回复 #8 llslls_007 的帖子

6    for i in col_cur loop
  7      v_sql:='select '||i.column_name||' from test';


---- 一般不是 open   然后再fecth   用i引用i.column_name  这样的写法
第一次见 。 哪里有这样的说明么 ,反正谢一个


还有就是因为很多列的类型不一样,怎么考虑用一个变量输出,都转成字符串?

[ 本帖最后由 llslls_007 于 2010-1-29 13:32 编辑 ]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
10 [报告]
发表于 2010-01-29 14:15 |只看该作者
说明没有,我只知道有这种用法

字段类型不一样,现在没想到有什么办法,可以按照你的想法来,因为dbms_output.putline本来需要字符串参数。

刚刚想到个问题,如果多行需要转成列的话,上面的那段不行,改了下:

  1. declare
  2.   v_sql varchar2(100);
  3.   v_col_value number;
  4.   cursor col_rowid is select rowid from test_table;
  5.   cursor col_cur is select column_name from user_tab_columns where table_name='TEST_TABLE' order by column_id;
  6. begin
  7.   for j in col_rowid loop
  8.     for i in col_cur loop
  9.       v_sql:='select '||i.column_name||' from test_table where rowid='''||j.rowid||'''';
  10.       execute immediate v_sql into v_col_value;
  11.       dbms_output.put_line(i.column_name||' '||v_col_value);
  12.     end loop;
  13.   end loop;
  14. end;
  15. /
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP