怎么取出数据库中为数组的值???说不清楚,具体看内容吧~~~~~~~~~~~~~~~~~

ASP_sem 2007-12-26 01:58:38
数据库中的字段是这样的存储的

(字段: purmf_price
注意:purmf_price不是数值型的,如: 2,0.00,;1,17.70,;0,18.66,;
组成方式:议价方式,单价,;议价方式,单价,;议价方式,单价,; 最多三组。
议价方式和数值的对应关系: 依合约价 0 依前购价1新价格 2 )
那我要显示的就是

议价方式 单价
新价格 0.00
依前购价 17.70
新价格 18.66

用SQL可以实现么??
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mantisXF 2007-12-26
  • 打赏
  • 举报
回复
嘿嘿,刚才试了一下还是可以的,不知道符不符合LZ要求 ..

try it ..


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

shawls 2007-12-26
  • 打赏
  • 举报
回复


这里只能用存储过程或者客户端等
一条sql恐怕难

毕竟这里有个字符串的分解过程

lynx 2007-12-26
  • 打赏
  • 举报
回复
写存储过程可以实现。具体参考:
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');

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧