select * from viewname where workerid=??? 
你建的视图确实没有workerid这列。你用这种查询建视图,是不是违背了视图的初衷?不会,学习,帮你顶。

解决方案 »

  1.   

    create view c as 
    select a.*,b.workerid
      from a,b
     where a.col1=b.col1 select * from c where c.workerid=???
      

  2.   

    oracle中的存储过程是可以返回记录集的,你在论坛里搜一下,以前有过这问题的.
      

  3.   

    存储过程是可以返回记录集的输入输出的标准游标写法//返回游标//建包CREATE OR REPLACE PACKAGE pkg_testASTYPE myrctype IS REF CURSOR;PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);END pkg_test;///建过程CREATE OR REPLACE PACKAGE BODY pkg_testASPROCEDURE get (p_id NUMBER, p_rc OUT myrctype)ISsqlstrVARCHAR2 (500);BEGINIF p_id = 0 THENOPEN p_rc FORSELECT ID, NAME, sex, address, postcode, birthdayFROM student;ELSEsqlstr :='select id,name,sex,address,postcode,birthdayfrom student where id=:w_id';OPEN p_rc FOR sqlstr USING p_id;END IF;END get;END pkg_test;///测试declarev_ID varchar2(10);v_NAME varchar2(30);v_sex varchar2(2);v_address varchar(50);v_postcode varchar(6);v_birthday date;v_rc pkg_test.myrctype;beginpkg_test.get(0,v_rc);loopfetch v_rc into v_id,v_name,v_sex,v_address,v_postcode,v_birthday;exit when v_rc%notfound;dbms_output.put_line(v_id||v_name||v_sex||v_address||v_postcode||v_birthday);end loop;end;/例二://返回游标//建包CREATE OR REPLACE PACKAGE testASTYPE myrctype IS REF CURSOR;END test;///建过程create procedure pro(c out test.myrctype)asstr varchar2(200);beginstr:='select * from student';open c for str;end;///测试declarev_ID varchar2(10);v_NAME varchar2(30);v_sex varchar2(2);v_address varchar(50);v_postcode varchar(6);v_birthday date;v_rc test.myrctype;beginpro(v_rc);loopfetch v_rc into v_id,v_name,v_sex,v_address,v_postcode,v_birthday;exit when v_rc%notfound;dbms_output.put_line(v_id||v_name||v_sex||v_address||v_postcode||v_birthday);end loop;end;/
      

  4.   

    最简单的使用Package 变量或是 context以下以package 变量为例:create package pkg_vars
      workerid number;
    end;
    /
    create view ....
    ......
    (select powertext from userpower   
                 where powertype='查询部门' 
                and userpower.workerid=pkg_vars.workerid)
    .........这样建立好后,
    当输入完 workerid 条件后调用 pkg_vars.workerid := ???
    最后查询该视图
      

  5.   

    55555555~~~~~~~~~~我要用视图啊...
    我的asp.net里已经有几十个Datagrid.Datasource=m_Command.ExecReader()了
    用存储过程太麻烦了,
      

  6.   

    To nyfor(nyfor):
    你的办法不能在asp.net里用
      

  7.   

    呵呵,哭起来了,你看看,能不能把视图建成这样
    create view c as 
    select a.*,b.workerid
      from a,b
     where a.col1=b.col1 你现在是这样
    create view c as
    select a.*
      from a
     where a.col in (select b.col from b )上一个,就是可以查询的哦
    select * from c where c.workerid=???
    你写的,就不行了。给个思路,错了别骂我
      

  8.   

    变相实现动态视图的方案:12:07:23 SQL> CREATE GLOBAL TEMPORARY TABLE TABLENAME (
    12:07:24   2     COL1  VARCHAR2(10)
    12:07:24   3  ) ON COMMIT DELETE ROWS ;表已创建。已用时间:  00: 00: 00.31
    12:07:25 SQL> drop view v_tb;视图已丢掉。已用时间:  00: 00: 00.62
    12:07:47 SQL> create view v_tb as
    12:07:48   2  select * from tb where col2=(select col1 from tablename where rownum=1);视图已建立。已用时间:  00: 00: 00.31
    12:07:49 SQL> select * from v_tb;未选定行已用时间:  00: 00: 00.00
    12:08:08 SQL> select * from tb;COL1       COL2                           COLNEW
    ---------- ------------------------------ --------------------
    1          aaa                            aaa
    2          aaa                            aaa
    3          aaa                            aaa
    4          bba                            bba
    5          bbb                            bbb
    6          bbb                            bbc
    7          bbb                            bbd
    8          bbb                            ccc
    9          bbb                            TEMP
    10         bbb                            ddd已选择10行。已用时间:  00: 00: 00.46
    12:08:13 SQL> insert into tablename values('bba');已创建 1 行。已用时间:  00: 00: 00.31
    12:08:27 SQL> select * from v_tb;COL1       COL2                           COLNEW
    ---------- ------------------------------ --------------------
    4          bba                            bba已用时间:  00: 00: 00.00
    12:08:31 SQL> commit;提交完成。已用时间:  00: 00: 00.00
    12:08:46 SQL> select * from v_tb;未选定行已用时间:  00: 00: 00.15
    12:08:53 SQL>