日期:2014-05-17  浏览次数:20990 次

关于在select查询把变量当字段使用的问题.
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是不固定查询出来的,我上面赋的值只是为了说明用.

------解决方案--------------------
用 execute immediate 'insert ...'
insert是拼的sql
------解决方案--------------------
execute immediate 'INSERT INTO SD035_ORDERS_HISTORY_DETAILS_T(
ORDER_HISTORY_NO,
ORDER_NO
) values ('|| pvarORDER_HISTORY_NO|| ','||ORDER_NO||')';


这个试试
------解决方案--------------------
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
------解决方案--------------------
探讨

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

------解决方案--------------------
探讨

引用:
引用:

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


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

请问还有别的办法实现吗 ,总觉得不太地道
……

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