SQL with PL/SQL
DDL commands --> create user / table / view / sequence
alter
DML --> data manipulation language (insert, select, update, delete)
eg :
SELECT ename FROM emp WHERE sal = (SELECT MAX(sal) FROM EMP);
%type(single col), %rowtype(single row/record)
cursor --> manu columns/rows
eg :
DECLARE
l_emp_ename emp.ename%type;
BEGIN
SELECT ename INTO l_emp_ename FROM emp WHERE sal = (SELECT MAX(sal) FROM EMP);
DBMS_OUTPUT.put_line('Message');
END;
DBMS_OUTPUT.put('message');
DBMS_OUTPUT.put_line('message);
the implicit cursor(give us 1 row/record)(create / open / get data / close by oracle automatically)
eg : select ename from emp where empno=1111;
the explicit cursor(give us many rows/records)(create / open / get data / close by ourselves)
eg : select * from emp;
an emplicit sursor works as follows :
open the cursor
fetch data from the cursor
fetch again to check if any more rows are found
eg :
DECLARE
l_find_job varchar2(10) := 'PROGRAMMER';
BEGIN
UPDATE emp
SET job = 'DEVELOPER'
WHERE job = 'PROGRAMMER';
END;
commir : save all DML commands
rollback : undo before commit
savepoint : roll back to the savepoint; clear all data till the last commit(when there is no savepoint)
aotocommit : when you close SQL*PLUS if autocommit is on, the data is you delete, update or insert without commit is saved.
set autocommit on/off
show autocommit
transaction control
eg :
BEGIN
update
commit
END;
commit
eg :
BEGIN
DELETE debug;
SAVEPOINT deleted_debug;
DELETE transactions;
ROLLBACK TO deleted_debug;
COMMIT;
END;
TRANSACTION starts from the last commit end with the commit.
eg :
create table test1(ename varchar2(10));
whenever you issue a SQL statement in a PL/SQL block, PL/SQL creates an implicit cursor, the implicit cursor is using number of attribute that can be selected to find the result of the SQL command.
SQL%ROWCOUNT : the number of rows processed by the SQL statement
SQL%FOUND : true if at least one row was processed by the SQL statement, otherwise false
SQL%NOTFOUND : true if no rows were processed by the SQL statement, otherwise false.
eg : select ename from emp where empno = 1111;
DBMS_OUTPUT.put_line(SQL%ROWCOUNT); (1)
eg : select * from emp;
SQL%ROWCOUNT ()
eg : select ename from emp where 1 = 2;
SQL%ROWCOUNT(0)
copy emp table to emp1 with all rec & data : create table emp1 as select * from emp;
find the largest number from three numbers
eg:
DECLARE
num1 number(10) := '&num1';
num2 number(10) := '&num2';
num3 number(10) := '&num3';
BEGIN
if num1 >= num2 then
if num2 >= num3 then
DBMS_OUTPUT.put_line(num1);
elif num1 >= num3 then
DBMS_OUTPUT.put_line(num1);
else
DBMS_OUTPUT.put_line(num3);
elif num2 >= num3 then
DBMS_OUTPUT.put_line(num2);
else
DBMS_OUTPUT.put_line(num3);
END;
eg :
DBMS_OUTPUT.new_line;
DBMS_OUTPUT.put_line();
DBMS_OUTPUT.put();
write a program to reverse the number user input : 5678 output : 8765
eg :
write a program to find the factorial (input 4 --> 4*3*2*1 ==) total as a result
eg :
declare
num number(4) := #
total number(10) := 1;
begin
for i in num
loop
total := total *i;
end loop;
end;
/
write a program to print fibonacci series(the next number is the sum of last two numbers)(0112358...)
eg :
declare
num1 number(5) := 0;
num2 number(5) := 1;
num3 number(5) := 1;
num number(5) := #
begin
for i in 1.. num
loop
num1 := num3 + num2;
num2 := num3 + num1;
num3 := num1 + num2;
DBMS_OUTPUT.put_line(num1);
DBMS_OUTPUT.put_line(num2);
DBMS_OUTPUT.put_line(num3);
end loop;
end;
/
eg :
declare
num number(6) := #
num1 number(6) := 0;
num2 number(6) := 1;
num3 number(6) := 1;
begin
DBMS_OUTPUT.put(' ' || num1);
DBMS_OUTPUT.put(' ' || num2);
for i in 3..num
loop
num3 := num1 + num2;
DBMS_OUTPUT.put(' ' || num3);
num2 := num2;
num2 := num3;
end loop;
DBMS_OUTPUT.new_line;
end;
wtite a program to display the given number is a prome number or not.(质数)(using mod() remaining=0 )
eg :
declare
num number(6) := #
begin
for i in 2..num
loop
if mod(num, i) != 0 then
end loop;
end;
eg :
declare
num number(5) := #
a number(5);
begin
for i in 2..num-1
loop
a := MOD(num, i);
if a = 0 then
goto ABC
end if;
end loop;
<<ABC>>
if a = 1 then
DBMS_OUTPUT.put_line(num || ' is a prime number');
else
DBMS_OUTPUT.put_line(num || ' is not a prime number');
end if;
end;
.
/
%type (single column)
%rowtype (all column)
some columns from the table
composite type
eg :
declare
TYPE emp_rec_type is record ( name varchar2(10), sal number(10), hiredate date);
emp_rec emp_rec_type;
begin
select ename, sal, hiredate into emp_rec from emp where empno = &empno;
DBMS_OUTPUT.put_line(emp_rec.name || emp_rec.sal || emp_rec.hiredate);
end;
.
/
SQL with PL/SQL的更多相关文章
- SQL和PL/SQL的区别
SQL和PL/SQL的区别 1. SQL是结构化查询语言,比较接近自然语言,使用SQL,只需要说干什么,不需要说怎么干.由数据定义语言.数据操纵语言.数据控制语言构成,它不面向过程,即前一条语句与后一 ...
- [PL/SQL]使用PL/SQL实现ORACLE的Excel格式导入导出
注:教程所使用的PL/SQL Developer版本为10版本 1.oracle导出excel格式 第一步,在pl/sql窗口查询出你想要导出的数据. 第二步,选择你想导出的数据,然后右键" ...
- 动态SQL和PL/SQL的EXECUTE选项分析
EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...
- SQL、PL/SQL、DDL、DML、TCL介绍
SQL:结构化查询语言(Structured Query Language) PL/SQL:过程化SQL语言(Procedural Language/SQL) DDL(Data Definition ...
- 【PL/SQL编程】SQL与PL/SQL的区别
SQL概念: SQL是结构化查询语言,由数据定义语言.数据操纵语言.数据控制语言构成,它不面向过程,即前一条语句与后一条语句无关.它没有流程控制,也不存在变量. PL SQL概念: PL/SQL ...
- PL/SQL不能格式化SQL:--PL/SQL Beautifier could not parse text
PL/SQL sql语句美化器点击没有反应.查看下面提示PL/SQL Beautifier could not parse text.本人此次产生的原因是sql语句语法错误. 工具栏处(如果没有此按钮 ...
- Oracle 和pl/sql以及pl/sql developer
oracle是厂家的名字,也是数据库产品的名字.比如sybase公司的sybase数据库.而微软公司的数据库产品就叫sqlserver了. pl/sql 是oracle数据库所用的sql语言的名称.微 ...
- PL\SQL和PL/SQL Developer 12安装与配置
安装: (1)在已有安装包的情况下,直接将安装包解压到文件夹下,注意不要解压缩到c:\programs Files(x86)的文件夹下,不能解压缩到有中文文件夹命名的文件夹下面 (2)没有安装包的情况 ...
- Oracle学习笔记十 使用PL/SQL
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...
随机推荐
- static final的理解
static: static静态,可以修饰类,成员变量,成员方法,代码块.static修饰的成员变量和方法独立于该类的任何对象,也就是被类的所有成员共享,这要这个类被加载,虚拟机就能根据类名在运行时数 ...
- 利用php的序列化和反序列化来做简单的数据本地存储
利用php的序列化和反序列化来做简单的数据本地存储 如下程序可以做为一个工具类 /** * 利用php的序列化和反序列化来做简单的数据本地存储 */ class objectdb { private ...
- js代码如何测试代码运行时间
function add(){ //这里放要执行的代码 } //开始测试并输出 function test() { var start=new Date().getTime(); add(); var ...
- js 中 continue 与 break 熟练使用
//break:在循环体中,遇到break,整个循环都结束了,后面的累加操作也不在执行了,并且循环体中,只要遇到break,那么循环体break后面的代码都不在执行了 //continue:在循环体中 ...
- python 练习 17
#!/usr/bin/python # -*- coding: UTF-8 -*- f1 = 1 f2 = 1 for i in range(1,21): print '%12d %12d' % (f ...
- robotframework笔记26
测试数据文档工具(Testdoc) Testdoc是机器人框架内置的工具生成高水平 根据测试用例文档. 创建的文档是在HTML中 格式和它包括名称.文档和其他元数据 测试套件和测试用例,以及和他们的顶 ...
- JavaWeb基础:HTTP协议和基于Restful的架构
HTTP介绍 HTTP协议是互联网上应用最广泛的协议,它是一种无状态的数据传输协议,规定了数据请求方和数据响应方的数据传输方式:使用HTTP协议可以跨平台,跨语言的进行数据传输和展示. 目前的Web应 ...
- android入门之: SharedPreferences
读取数据: 保存数据: +++++++++++++++++++方法详解++++++++++++++++++++++++++++++ SharedPreferences综述: 使用getSharedPr ...
- 杂记(编程style)----google code style!
1.文件名 使用小写字母和下划线组合.头文件以.h结尾,定义文件用.cc结尾.例如:my_useful_class.cc 2.类型名 使用大写字母开头,多个单词组合时每个单词的首字母大写.例如:Url ...
- jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
原文链接:http://www.cnblogs.com/steed-zgf/archive/2012/02/03/2336984.html <!DOCTYPE html PUBLIC " ...