数据库中的字段是这样的存储的(字段: purmf_price
注意:purmf_price不是数值型的,如: 2,0.00,;1,17.70,;0,18.66,;
组成方式:议价方式,单价,;议价方式,单价,;议价方式,单价,; 最多三组。
议价方式和数值的对应关系: 依合约价 0 依前购价1新价格 2 )
那我要显示的就是议价方式 单价
新价格 0.00
依前购价 17.70
新价格 18.66用SQL可以实现么??
注意:purmf_price不是数值型的,如: 2,0.00,;1,17.70,;0,18.66,;
组成方式:议价方式,单价,;议价方式,单价,;议价方式,单价,; 最多三组。
议价方式和数值的对应关系: 依合约价 0 依前购价1新价格 2 )
那我要显示的就是议价方式 单价
新价格 0.00
依前购价 17.70
新价格 18.66用SQL可以实现么??
http://topic.csdn.net/u/20071226/12/0b0d8daf-c261-4c3f-b252-a5fa4e588c06.html问题:
外面的程序会给存储过程传递一个EmployeeId字符串: "001,002,003,004". 我需要在Oracle中得到这个接受这个字符串。 并把这些Employee的表里删除。 用程序的语言就是, 我要把这个字符串分解成数组。 然后遍历数组删除表里的记录。 代码:
create or replace procedure mytest(p_empnums varchar2) is
v_dmp_empnum varchar2(30) := null;
v_empnums varchar2(300) := null;
begin
dbms_output.enable(20000);
v_empnums := p_empnums ¦ ¦ ',';
< <continuee> >
if instr(v_empnums, ',') = 0 then
v_dmp_empnum := v_empnums;
else
v_dmp_empnum := substr(v_dmp_empnum, 1, instr(v_empnums, ',', 1) - 1);
end if;
v_empnums := substr(v_empnums,
instr(v_empnums, ',', 1) + 1,
length(v_empnums));
--dbms_output.put_line(v_empnums ¦ ¦'-');
delete employee where empnum=v_dmp_empnum;
if v_empnums <> ',' then
goto continuee;
end if;
commit;
--'001,002,003,004'
end;
/ sql> set serveroutput on
sql> exec mytest('001,002,003,004');
一条sql恐怕难毕竟这里有个字符串的分解过程
SQL> select purmf_price from tbtest;PURMF_PRICE
--------------------------
2,0.00,;1,17.70,;0,18.66,;SQL>
SQL> select substr('#'||purmf_price,
2 instr('#'||purmf_price,'#',1,rn)+1,
3 instr('#'||purmf_price,',',1,rn)-instr('#'||purmf_price,'#',1,rn)-1) as nums,
4 substr('#'||purmf_price,
5 instr('#'||purmf_price,',',1,rn)+1,
6 instr('#'||purmf_price,'#',1,rn+1)-instr('#'||purmf_price,',',1,rn)-1) as prices
7 from (
8 select replace(purmf_price,',;','#') as purmf_price from tbtest
9 )t1,
10 (
11 select rownum as rn
12 from all_objects a
13 where rownum <= 5
14 )tt
15 where instr('#'||purmf_price,'#',1,rn) * instr('#'||purmf_price,',',1,rn) > 0;NUMS PRICES
------------------------ ------------------------
2 0.00
1 17.70
0 18.66