有时候维护数据,要处理时,要写一些复杂一些的SQl。这里偶在一个项目中也正好用到,就拿出来共享。
一,这是简单示例。
--select substr(zone_id,0,8) from ECOM_ZONE where zone_id like '%9999' and zone_id not in(select zone_id from ECOM_AREA_ZONE where zone_id like '%9999');
----这里是两个用来添加其他商圈的PL SQL块,
----第一个主要因为测试库中的数据不完整,而做的相应处理。所以要先执行第一个,以保证在存在不完整数据时能顺利完成操作。
---------------plsql块 1-----------------------
-----------------------------------------------------------------------------------------------------------------
declare cursor addareazone is
select zone_id from ECOM_ZONE where zone_id like '%9999' and zone_id not in(select zone_id from ECOM_AREA_ZONE where zone_id like '%9999');
begin
for myaddareazone in addareazone loop
insert into ECOM_AREA_ZONE (area_code,zone_id) values(substr(myaddareazone.zone_id,0,8),myaddareazone.zone_id);
end loop;
end;
二。这个稍微复杂,有数组处理
--------1.修改购物服务-sql---------------
DECLARE
TYPE temp_array IS TABLE OF varchar2(60)
INDEX BY BINARY_INTEGER;
gowu temp_array;
maxcode integer;
codevarcahr varchar2(10);
codeint integer;
codeheader varchar2(6);
maxcodevhar varchar2(10);
begin
codeheader:='010001';
gowu(1) := '电器/家电专业卖场';
gowu(2) := '电器/家电专卖店';
gowu(3) := '家具家居专业卖场';
gowu(4) := '家具家居专卖店';
gowu(5) := '通讯数码专业卖场';
gowu(6) := '特色土产商店';
select max(substr(sort_code,7)) into maxcode from ecom_sort where sort_code like '010001%';--查当前最大值
-----------------这是修改最后一项其他服务的sql,但如果其他服务存在子记录的话,则不能操作成功-------- ----------------------
-------------------注意:如果这里用了,则在下面的for循环中要修改为: codeint:=maxcode+i-1; 如果没用,则 则在下面的for循环中要修改为: codeint:=maxcode+i;
/* codeint:=maxcode+gowu.count;
if(codeint>=10) then codevarcahr:=codeheader||'00'||codeint;
end if;
if(codeint<10)
then
codevarcahr:=codeheader||'000'||codeint;
end if;
if(maxcode>=10) then maxcodevhar:=codeheader||'00'||maxcode;
end if;
if(maxcode<10)
then
maxcodevhar:=codeheader||'000'||maxcode;
end if;
update ecom_sort set sort_code=codevarcahr where sort_code=maxcodevhar;*/
-------------------------------------------------
FOR i IN 1..gowu.count LOOP
codeint:=maxcode+i;
if(codeint>=10) then codevarcahr:=codeheader||'00'||codeint;
end if;
if(codeint<10)
then
codevarcahr:=codeheader||'000'||codeint;
end if;
insert into ecom_sort(sort_code,name,grade,parent_code,sequence) values(codevarcahr,gowu(i),2,codeheader,codeint);
END LOOP;
END;
--------修改购物服务-sql-end--------------
--------2.修改餐饮美食-sql---------------
DECLARE
TYPE temp_array IS TABLE OF varchar2(60)
INDEX BY BINARY_INTEGER;
gowu temp_array;
maxcode integer;
codevarcahr varchar2(10);
codeint integer;
codeheader varchar2(6);
begin
codeheader:='010002';
gowu(1) := '徽菜';
gowu(2) := '川菜';
gowu(3) := '湘菜';
gowu(4) := '江海鲜';
gowu(5) := '江浙菜';
gowu(6) := '东北菜';
gowu(7) := '粤港菜';
gowu(8) := '鲁菜';
gowu(9) := '其他菜系';
gowu(10) := '西餐正餐';
gowu(11) := '时尚餐厅';
gowu(12) := '咖啡茶饮';
gowu(13) := '蛋糕甜品冷饮';
gowu(14) := '韩国料理';
gowu(15) := '东南亚菜';
select max(substr(sort_code,7)) into maxcode from ecom_sort where sort_code like '010002%';--查当前最大值
FOR i IN 1..gowu.count LOOP
codeint:=maxcode+i;
if(codeint>=10) then codevarcahr:=codeheader||'00'||codeint;
end if;
if(codeint<10)
then
codevarcahr:=codeheader||'000'||codeint;
end if;
insert into ecom_sort(sort_code,name,grade,parent_code,sequence) values(codevarcahr,gowu(i),2,codeheader,codeint);
END LOOP;
END;
--------修改餐饮美食-sql-end--------------
-----带结果集游标的使用--------------------------
declare
goodsIder varchar2(32);
cursor goosattr_info is
select goods_id goodsId from ecom_goods where goods_id not in(select goods_id from ecom_coupon_download);
begin
for mygoods_info in goosattr_info loop
insert into ecom_coupon_download (GOODS_ID, SMS_DOWNLOAD_COUNT, MMS_DOWNLOAD_COUNT, PRINT_COUNT, TOTAL_COUNT)values (mygoods_info.goodsId, 0, 0, 0, 0);
Dbms_Output.put_line(mygoods_info.goodsId'====='||picId);
end loop;
end;
分享到:
相关推荐
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
这个“Oracle PL-SQL.rar”压缩包提供了针对初学者的Oracle PL/SQL语言教程,包含丰富的源代码示例和详细的解说,旨在帮助学习者快速掌握这一技能。 PL/SQL全称为Procedural Language/Structured Query Language,...
Oracle SQL不仅支持标准SQL语句,还提供了许多扩展功能,使其成为处理复杂数据查询的强大工具。 ### 《精通Oracle SQL 第2版》书籍概述 《精通Oracle SQL 第2版》是一本全面介绍Oracle SQL的高级指南,适合已经...
通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...
`pl_sql`标签表明,这份资料可能包含了关于PL/SQL的基础和高级概念,比如块结构(DECLARE, BEGIN, END)、异常处理(TRY-CATCH)、游标处理、动态SQL以及如何调用Oracle数据库的内置函数和包。 `oracle_总结`标签...
虽然不能在SQL语句中直接使用联合数组,但可以通过PL/SQL将它们与数据库表格进行交互,例如通过游标将查询结果加载到联合数组,或者将联合数组的内容插入到数据库表格。 关于`add_months`函数,它是Oracle PL/SQL中...
通过阅读和执行这些脚本,读者能掌握如何在PL/SQL中进行数据操作、数据转换、数据聚合,以及如何使用PL/SQL进行数据库编程,包括调用系统包、处理PL/SQL记录类型、游标变量以及数组等高级特性。 总的来说,这个资料...
7. **索引和性能优化**:书中可能包含使用索引来提升查询性能的例子,以及如何分析和优化SQL语句以提高系统整体性能。 通过仔细研究这些示例代码,读者可以加深对Oracle PL/SQL的理解,学习如何有效地编写和调试PL/...
1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...
4. **存储过程和函数**:存储过程是一组预先编译的PL/SQL语句,可以在需要时调用,减少网络通信,提高性能。函数与存储过程类似,但必须返回一个值。它们可以用于封装复杂的业务逻辑,增强代码复用性。 5. **异常...
在Oracle PL/SQL中,我们可以通过使用SQL语句来与数据库进行交互,例如SELECT用于查询数据,INSERT、UPDATE和DELETE用于修改数据。PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持...
这个压缩包里的示例很可能会涵盖这些主题,并通过具体的代码实例演示如何编写和使用这些SQL语句。学习和实践这些示例,你将能深入理解Oracle SQL的功能和灵活性,并能在实际项目中高效地使用它。记住,实践是掌握...
- **规范要求**:与SQL语句一样,PL/SQL代码也应当添加注释,以帮助其他人理解其逻辑和功能。 - **示例**: ```plsql -- 计算员工的年度绩效奖金 DECLARE v_bonus NUMBER; BEGIN -- ... END; ``` ##### 3.6...
6. **TABLES**: TABLES.SQL可能包含创建、修改和查询表的SQL语句,这在任何PL/SQL程序设计中都是基础。 7. **PF**: "PF"可能是"Procedure or Function"的简写,05-PF.SQL可能展示了如何定义和使用PL/SQL中的过程和...
1. **存储过程**:存储过程是一组预编译的SQL语句,可以作为一个单元执行,提高了代码复用和执行效率。它们在数据库中存储,可以接受参数,返回结果,并能执行复杂的业务逻辑。 2. **序列**:在Oracle中,序列是...
Oracle SQL语句是数据库管理与数据查询的重要工具,尤其在Oracle数据库系统中,掌握SQL的高效使用至关重要。这个"oracle sql语句学习"资源包显然旨在帮助初学者逐步提升到高级水平,通过全面的笔记资料,使用户能够...
- **执行PL/SQL函数**:介绍如何在SQL语句中调用PL/SQL函数,实现更复杂的逻辑。 - **动态SQL**:讲解如何使用PL/SQL执行动态构建的SQL语句。 ##### 6. 高级主题 - **编译选项**:讨论编译时可用的各种选项及其对...
7. **子查询**:嵌套在其他SQL语句中的查询,可以作为表达式的一部分,用于比较、过滤或计算。 8. **视图**:虚拟表,基于一个或多个表的查询结果。创建视图可以简化复杂的查询,提供安全性,并为用户提供定制的...
Oracle 常用 PL/SQL 语句及示例 在 Oracle 数据库中,PL/SQL 语言是非常重要的,因为它可以帮助开发者快速、高效地编写 SQL 语句。下面将对 Oracle 常用 PL/SQL 语句及示例进行详细的解释。 一、复制表结构 在...