SQL编程(一)ITeye - 凯时娱乐

SQL编程(一)ITeye

2019年02月23日08时00分49秒 | 作者: 起运 | 标签: 类型,编程,进程 | 浏览: 1385

最近预备学习一下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 empINTO为游标,必需要加
WHERE empno= no;一个输入no
dbms_output.put_line(输出||v_ename);dbms_output为体系表,\\为连接符
EXCEPTION 抛出破例 
 WHEN NO_DATA_FOUND THEN
    dbms_output.put_line(输入有误);
命名块    跟匿名块差不多,多一个 
 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);
创立进程
CREATE OR REPLACE PROCEDURE update_sals(name varchar2, newsal number)
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;
调用函数
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)
BEGIN
  UPDATE emp SET sal = newsal
  WHERE  lower(ename) = lower(name);
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;
包调用 要加上包名
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.salnew 现在的值
  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= 
  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));
 复合类型之嵌套表 下标不能为负,能够作为列特点
 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
继续更新中~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2
  • 3

    SQL编程(一)ITeye

    类型,编程,进程
  • 4

    Oralce序列机制ITeye

    序列,问题,现象
  • 5

    数据库的粗浅知道ITeye

    数据库,范式,主键
  • 6

    [Oracle]取OracleITeye

    检查,数据库,用户
  • 7
  • 8

    Oracle树立DBLINK的具体过程ITeye

    数据库,北京,新疆
  • 9

    Oracle的splitITeye

    函数,数组,结构
  • 10