现在一直在思考这样的问题,在存储过程中是否可以写这样的语句:select * fron tab_name where 参数1=参数2,其中参数1是数据表tab_name 的字段,。请指点。怎样实现这样的功能。。

解决方案 »

  1.   

    EXECUTE IMMEDIATE 'select col1,col2,... from tab_name  where '||参数1||'='||参数2
      into vCol1,vCol2,....;
    只是返回是一条的记录。
    如果要返回多条可以用建表的形式。
      

  2.   

    create or replace package myPackage
    as
        type refCursor is ref cursor;
    end;create or replace procedure p
    (
       column_name varchar2,
       column_value number,
       cur out Mypackage.refCursor
    )
    as
    begin
          open  cur for 'select * from 表 where '||column_name||'='||to_char(column_value);
    end;
      

  3.   

    vivianfdlpw() ,我试了,好像不行,
      

  4.   

    这个语法好像是sql里面的,,oracle里面怎么实现呢,,恳请指点。。
      

  5.   

    动态sql语句?怎么实现呢?大家帮帮忙阿。。
      

  6.   

    --创建测试环境
    create table A(ID number,NAME varchar2(20));insert into A
    select 1,'张三' from dual
    union
    select 1,'李四' from dual;create or replace package myPackage
    as
        type refCursor is ref cursor;
    end;create or replace procedure p
    (
       column_name varchar2,
       column_value number,
       cur out Mypackage.refCursor
    )
    as
    begin
          open  cur for 'select * from A where '||column_name||'='||to_char(column_value);
    end;--测试
    declare
          cur Mypackage.refCursor;
          V_Row A%rowtype;
    begin
          P('ID',1,cur);
          loop
          fetch cur into V_Row;
          exit when cur%notfound;
          dbms_output.put_line(V_Row.NAME);
          end loop;
          
          close cur;
    exception
         when others then
         close cur;
         raise;
    end;--结果
    李四
    张三--删除测试环境
    drop table A cascade constraint;
    drop procedure P;
    drop package myPackage;
      

  7.   

    CREATE OR REPLACE PROCEDURE "P_test"    (
       参数1          VARCHAR2,
       参数2          VARCHAR2
    )
    IS
       strSql                  varchar2(2000);
    begin
       strSql:='select * fron tab_name where ' || 参数1 || '=''' || 参数2 || ''';
       execute immediate strSql;
       commit;
    end
      

  8.   

    可以!
       execute immediate strSql