惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
B
Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
爱范儿
爱范儿
博客园_首页
博客园 - 聂微东
量子位
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
F
Fortinet All Blogs
The Cloudflare Blog
T
Tailwind CSS Blog
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
腾讯CDC

博客园 - 系咪噶

[JAVA基础]流文件读写文件编码转换 最近转战东软 apache 新建虚拟机 +Zend Framework建立 Apache + php 配置 php基础教程之PHP面向对象技术(全面讲解) 今日无事,将一同志之毕设完结 SQL查询基本练习1:(作业) SQL Server 高级应用(周六讲座) 面向对象之CoreJava(第一课) CVS的使用(一课时) PL/SQL第三课(学习笔记) PL/SQL第二课(作业) PL/SQL第二课(学习笔记) Oracle第五课(学习笔记) Oracle第四课(学习笔记) 全步骤安装mysql SQL Server 存储过程的分页 无法连接到Visual Studio 的Localhost Web服务器 Oracle第三课(学习中笔记)
PL/SQL第一课(学习笔记)
系咪噶 · 2008-08-13 · via 博客园 - 系咪噶

PL/SQL(Procedural Language/SQL) 是在标准SQL的基础山增加了过程化处理的语言
Oracle客户端工具访问Oracle服务器的操作语言
Oracle对SQL的扩充

PL/SQL程序结构

PL/SQL块
1申明部分:DECLARE
2执行部分:BEGIN
3异常处理:EXCEPTION

1-helloworld.sql
--输出语句
DECLARE
    v_Num NUMBERL;--定义
    v_Str VARCHAR2(20);--定义
BEGIN
    v_Num := 2+3;--赋值
    DBMS_OUTPUT.PUT_LINE('v_Num = '||v_Num);--显示
END

sql> set serveroutput on --不写则执行脚本不显示在控制台上
sql> @ 1-helloworld.sql --执行地址要写正确,在什么目录就写在什么目录下。
dbms_output.put_line();

标量类型

NUMBER(3,-3) 1234     结果等于1000
小数点向前三位,然后四舍五入。
NUMBER(3,-1) 1234     结果等于1230

BINARY_INTEGER

DECLARE
    v_id NUMBER(7);
    v_fname VARCHAR(25);
    V_salary NUMBER(11,2);
BEGIN
    SELECT id,first_name,salary
    INTO v_id,v_fname,v_salary
    FROM s_emp
    WHERE id = 1;
    
    DBMS_OUTPUT.PUT_LINE(v_id||' '|| v_fname||' '|| v_salary);
END

DECLARE
    v_FirstName students.fist_name%TYPE;
上面表示,数据类型始终于表里面的该段数据的类型相同。

RECORD类型
建立类型
CREATE
    TYPE t_emp IS RECORD(
    id s_emp.id%TYPE
    )

%ROWTYPE
v_emp s_emp%ROWTYPE
如上则表示 v_emp 与s_emp 保持完全一致。
=====================================
id fist_name dept_id salary
测试
1、使用RECORD
DECLARE
    TYPE t_emp IS RECORD(
        id s_emp.id%TYPE,
        fist_name s_emp.fist_name%TYPE,
        dept_id s_emp.dept_id%TYPE,
        salary s_emp.salary%TYPE    
    );
    v_emp t_emp;
BEGIN
    SELECT id ,fisrt_name ,dept_id ,salary
    INTO v_emp
    FROM s_emp;
    DBMS_OUTPUT.PUT_LINE(v_emp.id ||' '||v_emp.first_name ||' '|| v_emp.dept_id||' '|| v_emp.salary);
END
2、使用%ROWTYPE

DECLARE
    v_emp s_emp%ROWTYPE
BEGIN
    SELECT * INTO v_emp
    FROM s_emp;
    DBMS_OUTPUT.PUT_LINE(v_emp.id||' '||v_emp.first_name||' '|| v_emp.dept_id||' '||v_emp.salary);
END

3、

**************************************************************************************************************
变量的作用域与可见性
虽然我知道,我 理解,但是上课我还是没听懂 她到底怎么讲解的

条件语句
IF THEN ELSE END IF
IF BOOLEN_EXPRESSION1 THEN
....
ELSIF BOOLEN_EXPRESSION2 THEN
...
ELSIF ...
ELSE
...
ENDIF;

题目:查询工资提成,大于1500的提成20%,大于1000小于1500的提成10%,小于1000的提成5%

DECLARE
    ID s_emp.id%TYPE :=1,
    salary s_emp.SALARY%TYPE,
    getchash s_emp.SALARY%Type,
BEING
    salary := SELECT SALARY FROM s_emp WHERE s_emp.id = ID;
    IF salary >=1500 THEN
    getchasH =salary * 0.15
    ELSIF salary >1000 THEN
    getchasH =salary * 0.1
    ELSE
    getchash =salary * 0.05
    END IF
    DBMS_OUTPUT.PUTLINE('id = '||id||' getcash = '||getchash);
END

练习:
1、从s_emp中找ID为1-5的员工保存在table类型变量里
DECLARE
    TYPE t_emp IS TABLE OF s_emp%ROWTYPE
        INDEX BY BINNARY_INTEGEH;
    v_emp t_emp;
    num NUMBER(1):=1;
BEGIN
    LOOP
    SELECT *
    INTO v_emp    (num)
    FROM s_emp
    WHERE ID = num
    num :=num +1;
    IF num >=5 THEN
    EXIT;
    END IF;
    END LOOP;
END
2、while
    从table类型变量里取出5名员工信息并输出。
BEGIN
    WHERE num <6 LOOP
    DBMS_OUTPUT_PUTLINE(v_emp(num).id||' '||v_emp(num).salary)
    END LOOP;
END