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

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
T
Tenable Blog
P
Proofpoint News Feed
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
F
Full Disclosure
P
Privacy & Cybersecurity Law Blog
美团技术团队
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
量子位
AI
AI
Spread Privacy
Spread Privacy
Help Net Security
Help Net Security
Know Your Adversary
Know Your Adversary
IT之家
IT之家
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
LangChain Blog
I
Intezer
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
月光博客
月光博客
Recorded Future
Recorded Future
O
OpenAI News
WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
S
Security @ Cisco Blogs
Recent Announcements
Recent Announcements
P
Privacy International News Feed
NISL@THU
NISL@THU
MongoDB | Blog
MongoDB | Blog
W
WeLiveSecurity
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
博客园 - Franky
Cyberwarzone
Cyberwarzone
H
Hacker News: Front Page

博客园 - 系咪噶

[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