【发布时间】:2015-07-01 21:33:24
【问题描述】:
我最近开始研究 pl/sql。所以对概念还不是很清楚。我正在编写一个具有一些输入值的存储过程。 使用这些输入值作为键,我创建了一个光标。
在此之后,我遍历游标输出,并为获取的每一行调用插入语句。 在调用插入之前,我做了一些数据操作。
- 拆分字符串 '4564:0:75556' 考虑 : 作为分隔符。 为此,我正在使用 SUBSTR 和 INSTR 函数
我的实际问题从这里开始。 SUBSTR 的输出将是一个字符串值。我将此值分配给我在 proc 中声明的 NUMBER 类型的变量。
我在编译这个过程时或至少在我测试它时预计会出错。
奇怪的是我没有收到任何错误,proc 工作正常。
这是预期的行为吗?
我们可以将字符串值分配给 NUMBER 类型的变量吗? 在我的过程中,我将 SUBSTR 的输出分配给变量 d_c1_subscr_no、d_c1_account_no、d_c1_subscr_no_resets NUMBER
我的存储过程:
CREATE OR REPLACE PROCEDURE P4_UPDATE_BILL_PERIOD_BULK(oldperiod IN VARCHAR,
newperiod IN VARCHAR,
accountno IN VARCHAR) IS
d_c1_subscr_no NUMBER;
d_c1_account_no NUMBER;
d_c1_subscr_no_resets NUMBER;
d_first_occ NUMBER;
d_second_occ NUMBER;
CURSOR c1_active_subs IS
select ciem.external_id as occ_ext_id,
ciem.subscr_no as fx_subscr_no,
ciem.subscr_no_resets as fx_subscr_no_resets
from customer_id_equip_map ciem, service s
where ciem.subscr_no = s.subscr_no
AND s.parent_account_no = to_number(accountno)
AND ciem.subscr_no_resets = s.subscr_no_resets
AND ciem.external_id_type = 6
AND ciem.active_date < SYSDATE
AND (ciem.inactive_date is null or ciem.inactive_date > SYSDATE);
d_subscriber c1_active_subs%ROWTYPE;
BEGIN
OPEN c1_active_subs;
LOOP
FETCH c1_active_subs
into d_subscriber;
EXIT WHEN c1_active_subs%NOTFOUND;
IF c1_active_subs%FOUND THEN
d_first_occ := INSTR(d_subscriber.occ_ext_id, ':', 1, 1);
d_second_occ := INSTR(d_subscriber.occ_ext_id, ':', 1, 2);
d_c1_subscr_no := SUBSTR(d_subscriber.occ_ext_id,
1,
d_first_occ - 1);
d_c1_subscr_no_resets := SUBSTR(d_subscriber.occ_ext_id,
d_first_occ + 1,
d_second_occ - d_first_occ - 1);
d_c1_account_no := SUBSTR(d_subscriber.occ_ext_id,
d_second_occ + 1);
INSERT INTO P4_BULK_DATA
(BATCH_ID, STATUS, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8)
VALUES
(10300,
0,
accountno,
d_subscriber.fx_subscr_no,
d_subscriber.fx_subscr_no_resets,
d_c1_account_no,
d_c1_subscr_no,
d_c1_subscr_no_resets,
oldperiod,
newperiod);
END IF;
END LOOP;
CLOSE c1_active_subs;
END;
【问题讨论】:
-
隐式转换 varchar2 -> 数字link
标签: sql plsql plsqldeveloper