SQL编程(一)

最近准备学习一下SQL编程,通过ORACLE10g pl/sql 编程,参照其写的一些实例,欢迎大家一起学习
 
准备工作:oracle10g,pl/sql developer 
创建表 emp 和 dept
CREATE OR REPLACE TABLE emp(
empno   VARCHAR2(32),
ename   VARCHAR2(32),
sal         NUMBER(7,2),
deptno  VARCHAR2(32),
constraint emp_key primary key(empno)
);
 
那么就开始了 直接上例子了:
 
--pl/sql实例
DECLARE--声明变量
v_ename VARCHAR(5);
BEGIN
SELECT ename INTO v_ename FROM emp--INTO为游标,必须要加
WHERE empno='&no';--一个输入no
dbms_output.put_line('输出'||v_ename);--dbms_output为系统表,\\为连接符
EXCEPTION --抛出例外 
 WHEN NO_DATA_FOUND THEN
    dbms_output.put_line('输入有误');
END;
--命名块    跟匿名块差不多,多一个<<>>
<<outer>>
DECLARE
v_deptno VARCHAR2(5);
v_name   VARCHAR2(10);
BEGIN
<<inner>>
  BEGIN
    SELECT dno INTO v_deptno FROM emp 
    WHERE lower(ename)=lower('&name')
  END;
  SELECT dname INTO v_name FROM emp
  WHERE deptno = v_deptno;
  dbms_output.put_line('名称'||v_name);
END;
--创建过程
CREATE OR REPLACE PROCEDURE update_sals(name varchar2, newsal number)
AS
BEGIN
  UPDATE emp SET sal = newsal
  WHERE  lower(ename) = lower(name);
END;
--调用过程
call update_sals('fei',7000);
--创建函数  必须有一个RETURN 语句在头部
CREATE OR REPLACE FUNCTION annual_income(name varchar2)
RETURN NUMBER AS
   annual_salary  NUMBER(7,2);
BEGIN
  SELECT sal*12 + nvl(comm,0) INTO annual_salary from emp
  WHERE lower(ename) = lower(name);
  RETURN annual_salary;
END;
--调用函数
--SQL命令行中
SQL->var sal NUMBER
SQL->call annual_income('fei') INTO :sal;
SQL->print sal;
--创建包 逻辑组合相关的函数和过程
--包声明
CREATE PACKAGE pkg AS
 PROCEDURE updatesals(name VARCHAR2(32),sal NUMBER);
 FUNCTION annual_income(name Varchar2(32)) RETURN NUMBER;
--包体定义
CREATE PACKAGE BODY pkg AS
PROCEDURE update_sals(name varchar2, sal number)
AS
BEGIN
  UPDATE emp SET sal = newsal
  WHERE  lower(ename) = lower(name);
END;
FUNCTION annual_income(name varchar2)
RETURN NUMBER AS
   annual_salary  NUMBER(7,2);
BEGIN
  SELECT sal*12 + nvl(comm,0) INTO annual_salary from emp
  WHERE lower(ename) = lower(name);
  RETURN annual_salary;
END;
END;
--包调用 要加上包名
SQL->call pkg.updatesals('fei',10000);
--创建触发器  通过某些特定条件隐含的执行存储过程
CREATE TRIGGER update_emp 
  AFTER UPDATE OF sal ON sal FOR EACH ROW 
BEGIN 
  UPDATE emp set sal =:new.sal--new 现在的值
  WHERE sal =:old.sal;--old 以前的值
END;
--简单类型
DECLARE 
  v_ename emp.ename%TYPE;--在不知道ename什么类型的状况下,可以匹配该类型
  v_sal   emp.sal%TYPE;
  v_sal_tax   Constant NUMBER(6,2):=1.5;--\ default expr 定义常量
  v_sal_af v_sal%TYPE;
  
BEGIN
  SELECT ename , sal INTO v_ename,v_sal
  FROM emp WHERE empno=&no;
  v_sal_af := v_sal * v_sal_tax;
  dbms_output.put_line('工资'||v_sal_af);
END;
--复合类型之记录  类似于结构体
DECLARE 
TYPE emp_record_type IS RECORD (
name emp.ename%TYPE,
salary emp.sal%TYPE,
title emp.job%TYPE);
emp_record emp_record_type;
BEGIN
 SELECT ename,sal,job INTO emp_record
 FROM emp Where empno='3';
 dbms_output.put_line('员工名'||emp_record.name);
 END;
 
 --复合类型之表 类似于数组,但下标没有上限和下限
 DECLARE 
 TYPE ename_table IS TABLE OF emp.ename%type
      INDEX BY BINARY_INTEGER;
      tabled ename_table ;
 BEGIN
  SELECT ename INTO tabled(-1) FROM emp
  WHERE empno = '2';
  dbms_output.put_line('雇员:'||tabled(-1));
END;
 
 
 --复合类型之嵌套表 下标不能为负,可以作为列属性
 
 CREATE OR REPLACE TYPE emp_type AS OBJECT(
 name VARCHAR2(10),salary NUMBER(6,2));
 
 CREATE OR REPLACE  TYPE emp_array IS  TABLE OF emp_type;
 
 CREATE TABLE unit(
 uno VARCHAR2(32),uname VARCHAR2(32),employee emp_array)
 NESTED TABLE employee STORE AS employee;--必须定义一个存储表
 
 --复合类型之VARRAY 它要限定元素个数
 
 CREATE TYPE art_type AS OBJECT(
 title VARCHAR2(30),publish DATE
 );
 CREATE TYPE art_array IS VARRAY(20) OF art_type;
 
 CREATE TABLE composition (
 id NUMBER(10),title VARCHAR2(32),art art_array
 );
 
持续更新中~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PL/SQL编程 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误。这样使得他的功能变的更强大。缺点是移植性不好。 编写一个存储过程,向表中添加数据。 1. create table mytest (name varchar2(30),passwd varchar2(30)); 2. create or replace procedure xxc_pro1 is begin insert into mytest values ('小红','m123'); end; 3. 调用过程 exec 过程名(参数1,参数2…)或call 过程名参数1,参数2…) ① exec xxc_pro1; 或者是 ② call xxc_pro1; pl/sql可以做什么? 块:包括过程、函数、触发器、包。 编写规范: 1. 注释 --:单行注释 eg:select * from emp where empno=7788;--取得员工信息 /*……*/多行注释 2. 表示符号(变量)的命名规范: ① 当定义变量时,建议用v_作为前缀:v_ename ② 当定义常量时,建议用c_作为前缀:c_rate ③ 当定义游标时,建议用_cursor作为后缀:emp_cursor ④ 当定义例外时,建议用e_作为前缀:e_error 块(block)是pl/sql的今本程序单元,编写pl/sql程序实际上就是在编写pl/sql块;pl/sql块由三部分组成:定义部分,执行部分,例外处理部分。 declare --可选部分 /*定义部分:定义常量,变量,游标,例外,复杂数据类型*/ begin --必选部分 /*执行部分:要执行的pl/sql语句和sql语句*/ exception --可选部分 /*例外处理部分:处理运行的各种错误*/ 实例1:只包含执行部分的pl/sqlSQL> set serveroutput on --打开输出 SQL> begin 2 dbms_output.put_line('hello'); 3 end; 4 / 说明:dbms_output是oracle提供的包,该包包含一些过程,put_line就是其中之一。 实例2:包含定义部分和执行部分 SQL> declare 2 v_ename varchar2(5); 3 begin 4 select ename into v_ename from emp where empno = &no; 5 dbms_output.put_line('雇员名'||v_ename); 6 end; 7 / 说明:&:从控制台输入变量,会弹出一个对话框。 实例3.同时输出雇员名和工资 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno=&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 end; 8 / 包含定义,执行,和例外处理的pl/sql块。 实例4.当输入的员工号不存在时 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno =&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 exception --异常处理部分 8 when no_data_found then 9 dbms_output.put_line('请输入正确的员工号!'); 10 end; 11 / 以上为块的基础,下面来介绍块的各个组成:过程,函数,触发器,包。 过程 过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql中可以使用create procedure命令来创建过程。 编写一个存储过程,可以输入雇员名和新工资来改变员工工资。 --案例 create or replace procedure xxc_pro3(newname in varchar2,newsal in number) is begin update emp set sal=newsal where ename=newname; end;
SQL编程思想PDF是一本介绍SQL编程思想的电子书籍。SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的语言。它允许用户通过简洁的语法来查询、修改和管理数据库中的数据。 SQL编程思想PDF主要介绍了SQL的基本概念和特性,以及SQL编程的一些常见技巧和最佳实践。该书从入门到高级的角度,系统地介绍了SQL编程的核心概念、基本语法和常用函数等内容。 该书首先介绍了SQL的基本概念,包括数据库、表、字段等的定义和使用方法。然后,通过丰富的实例,详细讲解了SQL的查询语句,包括SELECT、FROM、WHERE等关键字的使用方法和常见的查询模式。 在进一步介绍了SQL的查询语句之后,该书还讲解了SQL的插入、更新和删除操作,以及数据的排序和分组等高级操作。此外,书中还介绍了SQL的连接操作,包括内连接、外连接和交叉连接等的概念和使用方法。 最后,该书介绍了SQL编程的一些常见技巧和最佳实践,包括索引的优化、使用存储过程和触发器等高级应用。此外,还提供了一些实用的案例和示例,帮助读者更好地理解和掌握SQL编程。 总的来说,SQL编程思想PDF是一本全面介绍SQL编程思想的电子书籍,适用于初学者和有一定SQL基础的读者。通过学习该书,读者可以系统地学习和掌握SQL编程的核心概念和基本技巧,提高自己在数据库管理和数据处理方面的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值