将这段sql 改成存储过程select * from book t  where t.num=5058 and t.price=4747 and t.id in (select s.bookid from types s where  s.typesId=5304)
红色部分为输入的参数 
而且参数输入的为空 则 不要这个匹配条件两张表  一个 book表    一个types类型表    需求是一个 搜索book表  搜索条件是:num数   price价格   types 类型 这些条件可以组合 的帮帮忙啊

解决方案 »

  1.   


    CREATE OR REPLACE PROCEDURE select_book(num NUMBER,price NUMBER ,TYPES Number) IS get_num NUMBER;
    get_price NUMBER;
    get_types NUMBER;
    v_sql VARCHAR2(1000);
    v_sql1 VARCHAR2(100);
    BEGIN
    get_num:=num;
    get_price:=price;
    get_types:=TYPES;
    v_sql:='select * from book t';
    v_sql1:='select s.bookid from types s';IF (get_num='' OR get_num IS NULL) AND get_price <>'' AND get_price IS NOT NULL AND get_types<>'' AND get_types IS NOT NULL  THEN 
    v_sql:=v_sql||' where t.price='||get_price||' and t.id in ('||v_sql1||' where s.typesId='||get_types||' ) ';
    END IF;
    ...........---上面只是一种情况判断----以下情况再一种种加上去---
    -----但只是检索语句的动态sql是得不到结果的,要写成select into from 这样的语句,才能看到into后的结果---大体是这样,ok了吧。
    END;
      

  2.   

    你动态检索了 sql  如何运行sql 呢
      

  3.   

    execute immediate v_sql
        into 结果变量
        using 参数变量;