我正在编写代码以使用光标和其他东西从其他地方的表中获取数字,然后我修改这些数字并将这些数字放入新表中。
示例:
我得到的数字:12.34.56 我将这些数字加在点之间:3.7.11 这些最后的数字进入新表,但是当我尝试使用for表示它时,它说我有循环错误。
您能帮助我查找和修改我的错误吗?谢谢您的时间。
sp.diff(f, x).subs(x,0)
0
答案 0 :(得分:1)
尝试for循环,它要简单得多:
FOR VALOR in CURR_PHONE
LOOP
{...statements...}
END LOOP;
访问光标元素,例如VALOR。 VALOR.pene
答案 1 :(得分:0)
这是您可能的方法。
测试用例:
SQL> create table employees (phone_number varchar2(20));
Table created.
SQL> insert into employees values ('12.34.56');
1 row created.
SQL> insert into employees values ('22.55.88');
1 row created.
SQL> insert into employees values ('1.44.123');
1 row created.
功能:使用正则表达式将输入参数(par_phone_number)分为3部分。然后,它使用分层查询(而不是您使用的FOR循环)对每个数字的位数求和。
SQL> create or replace function fnc_pragunta3
2 (par_phone_number in varchar2)
3 return varchar2
4 is
5 retval varchar2(20);
6 begin
7 for cur_r in (select
8 regexp_substr(par_phone_number, '\d+', 1, 1) x,
9 regexp_substr(par_phone_number, '\d+', 1, 2) y,
10 regexp_substr(par_phone_number, '\d+', 1, 3) z
11 from dual
12 )
13 loop
14 select
15 (
16 (select to_char(sum(digit))
17 from (select substr(cur_r.x, level, 1) digit
18 from dual
19 connect by level <= length(cur_r.x))
20 ) ||'.'||
21 (select to_char(sum(digit))
22 from (select substr(cur_r.y, level, 1) digit
23 from dual
24 connect by level <= length(cur_r.y))
25 ) ||'.'||
26 (select to_char(sum(digit))
27 from (select substr(cur_r.z, level, 1) digit
28 from dual
29 connect by level <= length(cur_r.z))
30 )
31 ) into retval
32 from dual;
33 end loop;
34 return retval;
35 end;
36 /
Function created.
测试:
SQL> select
2 phone_number,
3 fnc_pragunta3(phone_number) res
4 from employees;
PHONE_NUMBER RES
-------------------- --------------------
12.34.56 3.7.11
22.55.88 4.10.16
1.44.123 1.8.6
SQL>