楼主: coldsun

如何实现SQL

[复制链接]
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
11#
 楼主| 发表于 2005-3-3 17:32 | 只看该作者
如何得到结果啊

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
12#
发表于 2005-3-3 17:41 | 只看该作者
[php]
SQL>variable C refcursor
SQL> set autoprint on;
SQL> declare
  2  v_number number default 45;
  3  begin
  4  open :c for  'select '||v_number||',empno from emp';
  5  end;
  6  /
[/php]

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
38
ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14现任管理团队成员
日期:2012-10-18 17:11:21版主4段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
13#
发表于 2005-3-3 17:42 | 只看该作者
最初由 coldsun 发布
[B]SQL> declare
  2  v_number number default 45;
  3  begin
  4  execute immediate 'select '||v_number||',empno from emp';
  5  end;
  6  /
执行完无结果,是不是不能用EXECUTE IMMEDIATE. [/B]


这个当然无结果喽,你要么打印出来,要不就创建一个view吧
declare
v_number number default 10;
s varchar2(4000);
begin
s:='create or replace view v_emp as select ';
s:=s || v_number || '||ename from emp';
execute immediate s;
end;
/
然后你只要select * from v_emp;就可以看到结果了

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
14#
发表于 2005-3-3 17:50 | 只看该作者
返回单行记录可以如下面这样写:

wyq@ORCL>declare
  2   v_number number default 45;
  3   l_num    number;
  4   l_empno  number;
  5  begin
  6   execute immediate 'select '||v_number||',empno from emp where rownum = 1' into l_num,l_empno ;
  7   dbms_output.put_line(l_num || '--' || l_empno);
  8  end;
  9  /
45--7369

PL/SQL procedure successfully completed.

wyq@ORCL>

返回多行时要定义一个游标变量(Ref cursor),再用动态SQL打开游标并用游标循环进行处理。

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
15#
 楼主| 发表于 2005-3-3 17:56 | 只看该作者
'select '||v_number||',empno from emp where empno>v_number
v_number 是东态的如何写呀.

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
 楼主| 发表于 2005-3-3 17:59 | 只看该作者
动态视图?还是CREATE FUNCTION?

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
17#
发表于 2005-3-3 18:02 | 只看该作者
真的猜不透你的意思!

是想这样的吗:

wyq@ORCL>select rownum,empno,ename from emp where empno > rownum;

    ROWNUM      EMPNO ENAME
---------- ---------- ----------
         1       7369 Smith
         2       7521 WARD
         3       7566 Jones
         4       7654 MARTIN
         5       7698 BLAKE
         6       7782 Clark
         7       7788 Scott
         8       7839 King
         9       7844 TURNER
        10       7876 Adams
        11       7900 JAMES
        12       7902 Ford
        13       7934 Miller

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
18#
发表于 2005-3-3 18:07 | 只看该作者
或者是想这样的吗?

wyq@ORCL>select empno,ename from emp where empno > dbms_random.value((select min(empno) from emp),(s
elect max(empno) from emp));

     EMPNO ENAME
---------- ----------
      7566 Jones
      7782 Clark
      7788 Scott
      7839 King
      7876 Adams
      7900 JAMES
      7902 Ford
      7934 Miller

8 rows selected.

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
19#
 楼主| 发表于 2005-3-3 18:11 | 只看该作者
SQL> select empno,'7900' from emp where empno>7900;

     EMPNO '790
---------- ----
      7902 7900
      7934 7900

SQL> select empno,'7800' from emp where empno>7800;

     EMPNO '780
---------- ----
      7839 7800
      7844 7800
      7876 7800
      7900 7800
      7902 7800
      7934 7800

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
20#
 楼主| 发表于 2005-3-3 18:18 | 只看该作者
就是将条件值作为SELECT的一列显示,条件值为变化的.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表