PL/SQL问题,请帮忙啊!!

wangweixy 2005-03-21 11:17:09
求救啊!关于取出一个表的字段名的问题
有个棘手的问题,请高手帮忙啊

有一组不确定的SELECT 语句,想在PL/SQL中取出每条SELECT查询出的每一个字段的名字,不要其中的记录,只单独取每个字段的名字,该如何实现啊?谢谢啦!
意思就是说如select a,b,c from dual;或select aaa,bbb from dual;这样两条不同的SQL语句,均需要取出select 后面的字段名a,b,c或aaa,bbb,该如何实现了?

如果是有类似RECORDSET对象的就好了,可以用fieldname属性直接取
...全文
118 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqian008 2005-03-22
  • 打赏
  • 举报
回复
关注ing
wangweixy 2005-03-22
  • 打赏
  • 举报
回复
我搞定了,呵呵,用了DBMS_SQL包的方法,可以取出列数,再循环取出列的名称就OK了
doulikeme 2005-03-21
  • 打赏
  • 举报
回复
呵呵 上面的只是简单的字符处理 如果要复杂一点可以进一步做语义分析
写个过程也不难得
doulikeme 2005-03-21
  • 打赏
  • 举报
回复
定位第一个 select 和 from,把中间的取出来

rtrim(ltrim(substr(sqltext,(instr(upper(sqltext),'SELECT')+6),(instr(upper(sqltext),'FROM')-(instr(upper(sqltext),'SELECT')+6))))

例如:

SQL> SELECT rtrim(
2 ltrim(
3 substr('select aaa,bbb from dual;',
4 (instr(upper('select aaa,bbb from dual;'),'SELECT')+6),
5 (instr(upper('select aaa,bbb from dual;'),'FROM')-(instr(upper('select aaa,bbb from dual;'),'SELECT')+6))
6 )
7 )) FROM dual;

RTRIM(LTRIM(SUBSTR('SELECTAAA,
------------------------------
aaa,bbb

SQL>
fsonly 2005-03-21
  • 打赏
  • 举报
回复
要用这个作什么?
wangweixy 2005-03-21
  • 打赏
  • 举报
回复
是select 选择的字段,不是具体的from 后面的某个表啊。怎么可能从数据字典取了?
fsonly 2005-03-21
  • 打赏
  • 举报
回复
SELECT COLUMN_NAME FROM USER_TAB_COLS WHERE TABLE_NAME = 'B_AGENT';

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧