下边是存储过程的代码
create or replace procedure JK_ODSO_PROD_CUST_RELA(bat_id in varchar2,area in varchar2) is
table_name varchar2(64) := 'PDT_SERV_'||area;
table_name_jk varchar2(64) := 'ODSO.ODSO_PROD_CUST_RELA_'||area||'@JIEKOU';
Cursor myCur is select prd_id from table_name where trunc(ZH_CHECK_DATE,'dd')=trunc(sysdate,'dd');
v_prd_id varchar2(64);
e_err varchar2(2000) :='';
insertSql_e8_phone varchar2(4000) := 'insert into '||table_name_jk||'(
PROD_ID,
PROPERTY_CUST_ID,
CUST_ID,
PROD_ADDRESS,
STATUS,
BAT_ID,
PRD_ID,
MEDIUMTYPE,
E8PRODUCTINSTANCE) '||'
select
a.SERV_ID,
a.OWN_CUST_ID,
a.USE_CUST_ID,
a.INSTALL_ADDR,
decode(a.ZH_CHECK_TYPE,''ori_rec'',''insert'',''add_rec'',''insert'',''mod_rec'',''update'',''del_rec'',''delete'',null),
:bat_id,
PRD_ID,
b.val,
b.PRD_INST_ID
from '||table_name||' a,
(select DISTINCT PRD_INST_ID, VAL from PDT_SERV_ATTR_'||area||' Where PRD_FEA_TYPE_ID=718 AND ZH_CHECK_TYPE <>''del_rec'') b
where trunc(a.ZH_CHECK_DATE,''dd'')=trunc(sysdate,''dd'') and a.prd_inst_id=b.prd_inst_id';
insertSql_e8_adsl varchar2(4000) := 'insert into '||table_name_jk||'(
PROD_ID,
PROPERTY_CUST_ID,
CUST_ID,
PROD_ADDRESS,
STATUS,
BAT_ID,
PRD_ID,
MEDIUMTYPE,
E8PRODUCTINSTANCE,
BANDWIDTH) '||'
select
a.SERV_ID,
a.OWN_CUST_ID,
a.USE_CUST_ID,
a.INSTALL_ADDR,
decode(a.ZH_CHECK_TYPE,''ori_rec'',''insert'',''add_rec'',''insert'',''mod_rec'',''update'',''del_rec'',''delete'',null),
:bat_id,
PRD_ID,
b.val,
b.PRD_INST_ID
c.val
from '||table_name||' a,
(select distinct PRD_INST_ID, VAL from PDT_SERV_ATTR_553 Where PRD_FEA_TYPE_ID=718 AND ZH_CHECK_TYPE <>''del_rec'') b,
(select distinct PRD_INST_ID, VAL From PDT_SERV_ATTR_553 Where PRD_FEA_TYPE_ID IN (114,115) AND ZH_CHECK_TYPE <>''del_rec'') c
where trunc(a.ZH_CHECK_DATE,''dd'')=trunc(sysdate,''dd'') and
a.prd_inst_id=b.prd_inst_id and
a.prd_inst_id=c.prd_inst_id';
insertSql varchar2(4000) := 'insert into '||table_name_jk||'(
PROD_ID,
PROPERTY_CUST_ID,
CUST_ID,
PROD_ADDRESS,
STATUS,
BAT_ID,
PRD_ID) '||'
select
a.SERV_ID,
a.OWN_CUST_ID,
a.USE_CUST_ID,
a.INSTALL_ADDR,
decode(a.ZH_CHECK_TYPE,''ori_rec'',''insert'',''add_rec'',''insert'',''mod_rec'',''update'',''del_rec'',''delete'',null),
:bat_id,
PRD_ID
FROM '||table_name||'
a where trunc(a.ZH_CHECK_DATE,''dd'')=trunc(sysdate,''dd'')';
begin
--if myCur%isopen = false then
open myCur;
-- end if;
LOOP
--取出产品数据类型
fetch myCur into v_prd_id;
--本身是E8-C产品
if v_prd_id ='1101' THEN
execute immediate insertSql_e8_phone using bat_id;
commit;
--电话挂载的E8-C产品
ELSIF v_prd_id='1304' THEN
execute immediate insertSql_e8_phone using bat_id;
commit;
--ADSL挂载的E8-C产品
ELSIF v_prd_id='1307' THEN
execute immediate insertSql_e8_adsl using bat_id;
commit;
else
execute immediate insertSql using bat_id;
commit;
END IF ;
end LOOP;
close myCur;
insert into MSG_INTERFACE_LOG values(sysdate,'1007','产品客户关联','success',bat_id);
commit;
exception
when others then
rollback;
e_err := SQLCODE||' <>'||SQLERRM;
insert into MSG_INTERFACE_LOG values(sysdate,'1007','产品客户关联',e_err,bat_id);
commit;
raise;
end JK_ODSO_PROD_CUST_RELA;
不过把红色的部分换成一个固定的表则可以正常执行。否则有错误,提示这个表不存在,其实是存在的,因为area是个变量,存储过程就不认这个表了,
大家帮看下
相关推荐
在打开游标后,通过一个`while`循环来不断读取游标中的数据,并将每一条学生ID插入到`DynamicEvaluation`表中。需要注意的是,使用`@@fetch_status`判断是否已经到达结果集的末尾,如果达到则通过`break`语句退出...
本例中需要创建一个名为“填班级人数”的存储过程,该过程使用游标遍历每个班级的学生数量,并更新到班级表中。具体实现如下: ```sql CREATE PROCEDURE 填班级表人数过程 AS BEGIN DECLARE @i INT, @classId CHAR...
本文将深入探讨如何在Oracle存储过程中使用游标进行多表操作,具体通过一个示例来展示这一过程。 ### 标题与描述分析 标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,...
例如,在一个订单处理系统中,可以创建一个触发器,每当有新订单插入时,这个触发器会调用一个存储过程,该过程使用游标遍历订单的每一项商品,检查库存并更新相关记录。这样,系统可以自动跟踪库存变化,无需额外的...
存储过程是预编译的一系列SQL语句集合,存储在数据库中,并以一个特定的名字标识。当需要执行这些预定义的操作时,只需通过调用存储过程的名称,数据库就会自动执行其中的所有语句,无需再次编译,这大大提高了执行...
该触发器定义了在`s_c`表上进行删除操作前的逻辑,即当有记录被删除时,将该记录插入到另一个表`s_c1`中。 #### 四、视图的创建与维护 视图是基于表或其他视图的一种虚拟表,它可以简化数据查询、保护敏感数据等。...
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
2. 使用游标:在存储过程中声明并打开一个游标,以便逐行处理查询结果。通过FETCH语句获取游标当前指向的数据行,并进行相应的操作。 3. 条件判断与循环:可能需要在存储过程中使用IF-ELSE结构进行条件判断,或者...
触发器可以理解为一个事件处理器,用于响应数据库中的事件,例如,插入、更新、删除操作。触发器的主要应用场景包括: *数据一致性:触发器可以用于实现数据的一致性,例如,检查数据是否符合业务规则。 *数据安全...
例如,你可以编写一个存储过程,该过程接受参数,根据参数值动态构建并执行SQL查询。 3. 视图 视图是从一个或多个表中选择数据的虚拟表,它不存储数据,但提供了一种简化数据访问和聚合的方式。视图可以隐藏复杂的...
存储过程中不使用`GO`语句,因为`GO`在批处理中用于分隔命令,而存储过程本身就是一个批处理。 总之,TSQL的存储过程和游标是数据库管理和数据操作的重要工具。存储过程增强了SQL语言的功能,提高了代码复用性,...
- **示例**:一个使用游标的存储过程可能用于更新表中满足特定条件的行: ```sql CREATE OR REPLACE PROCEDURE update_rows AS cursor_name CURSOR FOR SELECT * FROM table_name WHERE condition; var1 ...
1. **声明游标**:首先需要声明一个游标,指定其类型、源数据集(通常是查询语句)以及其属性。例如: ```sql DECLARE @MyCursor CURSOR FOR SELECT * FROM MyTable; ``` 2. **打开游标**:声明后,需要使用OPEN语句...
再比如,创建一个存储过程来批量更新表中的数据: ```sql CREATE OR REPLACE PROCEDURE update_employee_salaries(p_department_id NUMBER) AS CURSOR emp_cursor IS SELECT employee_id, salary FROM employees ...
创建动态游标的关键是设计一个能够动态生成 SELECT 语句的存储过程。在这个存储过程中,我们可以使用参数来传递 SELECT 语句,并使用字符串操作函数来生成最终的 SELECT 语句。 在本例中,我们使用了一个名为 `Usp_...
存储过程是一组预编译的TSQL语句,它们被封装在一起并赋予一个特定的名字,以便在需要时能够方便地调用执行。存储过程在数据库设计中扮演着重要角色,它能够提升性能、增加代码复用、提高安全性,并简化复杂的操作。...
### 游标与存储过程在SQL Server中的应用 #### 一、游标的使用方法 游标是数据库管理系统中用于处理查询结果集的一种机制,它允许用户逐行地访问查询结果,而不是一次返回所有数据。这对于大数据量处理尤其有用,...
根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...
游标是数据库中的一个临时存储区域,它允许用户通过逐行的方式处理结果集中的数据。在SQL中,游标主要用于循环读取查询结果中的每一行数据。 #### 2. 游标的基本操作 - **声明游标**:使用`DECLARE cursor_name ...