DECLARE pvarORDER_HISTORY_NO NUMBER;pvarORDER_HISTORY_NO NUMBER = '222'INSERT INTO SD035_ORDERS_HISTORY_DETAILS_T(
         ORDER_HISTORY_NO,
         ORDER_NO
)
SELECT
pvarORDER_HISTORY_NO ,ORDER_NO from SD035_ORDERS_HISTORY_DETAILS_T其中pvarORDER_HISTORY_NO是一个变量,我想让 ORDER_HISTORY_NO插入都是一个值,就是pvarORDER_HISTORY_NO,请问这样写在oracle的存储过程中能执行吗,应该怎样改能实现我的要求,谢谢~
注:pvarORDER_HISTORY_NO NUMBER是不固定查询出来的,我上面赋的值只是为了说明用.

解决方案 »

  1.   

    用 execute immediate 'insert ...'
    insert是拼的sql
      

  2.   

    execute immediate 'INSERT INTO SD035_ORDERS_HISTORY_DETAILS_T(
      ORDER_HISTORY_NO,
      ORDER_NO
    ) values ('|| pvarORDER_HISTORY_NO|| ','||ORDER_NO||')';
    这个试试
      

  3.   

    pvarORDER_HISTORY_NO NUMBER = '222'去掉
    INSERT INTO SD035_ORDERS_HISTORY_DETAILS_T(
      ORDER_HISTORY_NO,
      ORDER_NO
    )
    SELECT
    '222',ORDER_NO from SD035_ORDERS_HISTORY_DETAILS_T
      

  4.   

    我是写在存储过程里的 能用execute immediate 吗?
    pvarORDER_HISTORY_NO NUMBER是不固定的,并不一定是222
      

  5.   


    就是存储过程里面用来执行动态拼出来的sql以及一些比如create index等命令用的
      

  6.   

    pvarORDER_HISTORY_NO NUMBER = '222'
    换成查询得到的值:select v_ORDER_HISTORY_NO into pvarORDER_HISTORY_NO from .....
      

  7.   


    create or replace procedure proc_***
    as
    pvarORDER_HISTORY_NO NUMBER;beginselect ×× into pvarORDER_HISTORY_NO from tbl;INSERT INTO SD035_ORDERS_HISTORY_DETAILS_T(
      pvarORDER_HISTORY_NO,
      ORDER_NO
    );
    exception when others then
    raise;
    end;其余逻辑请自己加
      

  8.   

    INSERT INTO SD035_ORDERS_HISTORY_DETAILS_T(
      pvarORDER_HISTORY_NO,
      ORDER_NO
    );pvarORDER_HISTORY_NO 这个又不是字段名是个变量,能这样写吗?
    编译时系统怎么知道把pvarORDER_HISTORY_NO赋给哪个字段...
      

  9.   

    用动态执行sql语句吧,很好用execute immediatel ‘要执行的sql语句’;
    例子: execute immediate 'select * from dual' into 变量名;
    但是在存储过程中要把查询的结果存到一个变量里。