首頁 資料庫 mysql教程 plsql与tsql的语法不同

plsql与tsql的语法不同

Jun 07, 2016 pm 06:06 PM
plsql

plsql与tsql的语法不同简单整理,大家可以参考下。

insert into testtable(recordnumber,currentdate) values (i,sysdate);
print ‘';
select @i=@i+1;
end;

比较一下就可以看出来到底那里不一样了

plsql里面命令的结构为
delacre
定义语句段
begin
执行语句段
exception
异常处理语句段
end
这就是plsql程序总体结构图

定义变量与mssql的不同
基本方法
变量名 类型标识符【notnull】:=值
例 age number(8):=26
多了定义复合数据类型变量的功能
1.多了%type 变量
declare
mydate user。testtable.currentdate%type;
还有 %rowtype类型的变量可以识变量获得字段的数据类型,使用%rowtype可以识变量获得整个记录的数据类型。
变量名 数据表.列名%type
变量名 数据表%rowtype
declare
mytable testtbale%rowtype 包含了testtable 所有字段 只不过在输出时候可以选择输出那个
begin
shelect * into mytable
from temuuser.tedttbale
where recordnumber=88
dbms_output.put_line(mytable.currentdate);
end;
还有就是有了定义符合变量
格式
type 复合变量名 is record(
变量 类型, 可以有好几个);
变量名 复合变量名 这个变量名就好像java中类的对象一样而复合变量名就是类名可以这样理解 个人观点
begin
select * into 变量名 from 表名 where 条件
dbms_output.put_line(变量名.表中的值)
end

另外还可以定义一维数组
type 表类型 is table of 类型 index by binary_integer
表变量名 表类型
index by binary_integer子句代表以符号整数为索引,
这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”

Declare
type tabletype1 is table of varchar2(4) index by binary_integer;
type tabletype2 is table of tempuser.testtable.recordnumber%type index by
binary_integer;
table1 tabletype1;
table2 tabletype2;
begin
table1(1):='大学';
table1(2):='大专';
table2(1):=88;
table2(2):=55;
dbms_output.put_line(table1(1)||table2(1));
dbms_output.put_line(table1(2)||table2(2));
end;
一个标准的一维数组

定义多维表类型变量
定义了名为 tabletype1 的多维表类型,相当于多维数组,table1 是多维表类型变量,将数据表 tempuser.testtable 中
recordnumber为 60 的记录提取出来存放在 table1 中并显示。

type tabletype1 is table of testtable%rowtype index by binary_integer;
table1 tabletype1;
begin
select * into table1(60)
from tempuser.testtable
where recordnumber=60;
dbms_output.put_line(table1(60).recordnumber||table1(60).currentdate);
end;

在来看下面的这个程序
set serveroutput on
Declare
result integer;
begin
result:=10+3*4-20+5**2;
dbms_output.put_line('运算结果是:'||to_char(result));
end;

|| 这个符号是连接语句
to_char(result) dbms_output.put_line函数输出只能是字符串,因此利用 to_char函数将数值型结果转换为字符型。
To_char:将其他类型数据转换为字符型。 To_date:将其他类型数据转换为日期型。 To_number:将其他类型数据转换为数值型。

再说下plsql中的控制语句组合有哪几种

1. if..then..end if条件控制
if 条件 then
语句段;
end if;

2. if..then..else..end if条件控制
if 条件 then
语句段1;
else
语句段2;
end if;

3. if 嵌套条件控制
if 条件1 then
if 条件2 then
语句段1;
else
语句段2;
end if;
else
语句段3;
end if;

4.loop..exit..end loop 循环控制
loop
循环语句段;
if 条件语句 then
exit;
else
退出循环的处理语句段
end if;
end loop;

5. loop..exit..when..end loop 循环控制
采用 loop..exit..when..end loop 循环控制的语法结构与loop..exit..end loop 循环控制类似
exit when 实际上就相当于
if 条件 then
exit;
end if;

6.while..loop..end loop 循环控制
while 条件 loop
执行语句段
end loop;

7.for..in..loop..end 循环控制
for 循环变量 in [reverse] 循环下界..循环上界 loop
循环处理语句段;
end loop;
最后一个出个例子
set serveroutput on
declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
for i in 1..10 loop
number1:=number1+1; 在mssql里是 sclect @number=@number+1
end loop;
dbms_output.put_line('number1的值:'||to_char(number1));
end;
本人学java 的 对plsql一看觉的很简单 和java比起来简单多了但是oracle 命令只是一部分更多的东西需要我去学习 自夸一下 哈哈

在plsql 多了事务处理命令

commit命令
commit事务提交命令。在oracle中为了保证数据的一致性在内存中将为每个客户机建立工作区,就是说在用commit命令之前的操作都在这个工作群里完成,只有在用commit命令之后才会把你写的命令写入到数据库中。
有个自动进行事务提交的命令
set auto on
关闭为 set auto off

rollback命令
rollback是事务回滚命令,在没有提交commit命令千,如果发现delete insert update等操需要恢复的话,可以用rollback命令会滚到上次commit时的状态。
set auto off 要先关闭自动提交
select * from scott.emp;
delete form scott.emp;
rollback
这个时候就可以看到 scott.emp还是以前的没有变化

savepoint命令
这个命令时保存点命令。事务通常由多个命令组成,可以将每个事务划分成若干个部分进行保存,这样回滚每个保存点,就不必回滚整个事务。
创建保存点 savepoint 保存点名
回滚保存点 rollback to 保存点名
来个例子
insert into scott.emp(empno,ename,sal) values(9000,'wang',2500); 先插入一个值
savepoint insertpoint; 创建一个还原点,名字叫insertpoint
rollback to insertpoint; 还原到那个还原点

下面开始说游标
这个东西在mssql里没有吧 我没有印象
游标不是c里面的指针,我一看到这个词就想到了指针可惜何c里面的指针大不一样 不要弄混了 估计没人会弄混。
游标可以说是一个临时的数据存放的地方
要用游标先要定义
cursor 游标名 is select 语句
cursor这是游标的关键字 selcet建立游标的查询命令
看个例子
set serveroutput on
declare
tempsal scott.emp.sal%type 定义了一个变量他是scott.emp.sal同一个类型
cursor mycursor is 定义一个游标mycursor
select * from scott.emp
where sal>tempsal;
begin
tempsal:=800;
open mycursor; 打开这个游标
end;
晕忘了 只是打开游标没有用 还要提取游标的数据
用fetch命令
fetch 游标名 into 变量1,变量2,。。。。;
或者
fetch 游标名 into 记录型变量名;
上面那个程序要改一下

set serveroutput on
declare
tempsal scott.emp.sal%type 定义了一个变量他是scott.emp.sal同一个类型
cursor mycursor is 定义一个游标mycursor
select * from scott.emp
where sal>tempsal
new scott.emp%rowtype; 有定义了一个新的变量
begin
tempsal:=800;
open mycursor; 打开这个游标
fetch mycursor into new; 读取游标数据把他添加到new中
dbms_output._line(to_char(new.sal)); 显示结果
close mysursor; close关闭这个游标
end;

游标的属性
1.%isopen属性
就是判断游标是否打开,如果没有打开就是用fetch语句提示错误
2.%found属性
就是测试前一个fetch语句是否有值,有就返回true 没有就返回false
3.%notfound属性 和上面的相反
4.%rowcount属性 判断游标的数据行数就是有多少数据

下面说下过程的概念 sql里没有
完整的过程的结构如下
create or replace 过程名 as
声明语句段;
begin
执行语句段;
exception
异常处理语句段;
end;
过程是有名称的程序块,as关键词代替了无名块的declare

创建实例的过程
创建一个名为tempprocdeure的过程,create是创建过程的标识符,replace表示如果又同名的过程将覆盖原过程。定义了一个变量,其类型何testtable数据表中的currentdate字段的类型相同,都是日期型,将数据表中的recordnumber字段为88的 currentdate字段内容送入变量中,然后输出结果。

set serveroutput on
creat or replace procedure tempuser.tempprocedure as
tempdate tempuser.testtable.currentdate%type;

begin
select currentdate
into tempdate
from testtable
where recordnumber=88;
dbms_output.put_line(to_char(tempdate));
end;
使用过程
set serveroutput on
begin
tempprocedure;
end;
下面说下带参数的过程
1.参数类型
in 读入参数 程序向过程传递数值
out 读出参数 过程向程序传递数值
in out 双向参数 程序过程互相传递数值
定义带参数的过程
set serveroutput on
creat or replace procedure scott.tempprocedure(
tempdeptno in scott.dept.deptno%type,/*定义了一个in类型的变量*/
tempdname out scott.dept.danme%type,/*定义了一个out类型的变量*/
temploc in out scott.dept.loc%type)as /*定义了一个inout型的变量*/
loc1 scott.dept.doc%type;
dname1 scott.dept.dname%type;
begin
select loc into loc1
from scott.dept
where deptno=tempdeptno;
select danme into danme1
from scott.dept
where deptno=tempdeptno;
temploc:='地址'||loc1;
tempdname:='姓名'||dname1;

end;

定义好了 下面开始用了
set serveroutput on
declare
myno scott.dept.deptno%type;
mydname scott.dept.dname%type;
myloc scott.dept.loc%type;

begin
myno:=10;
mydname:=”;
myloc:=”;
scott.tempprocedure(myno,mydname,myloc);
dbms_output.put_line(myno);
dbms_output.put_line(mydname);
dbms_output.put_line(myloc);
end;
搞定了
就是说用重新定义的三个变量当参数传递给上面定义的过程过程里带参数的变量可以接受这三个变量的值
用java语言来解释就是那个过程就是类 带三个参数
这三个变量就是数据 当然没有对象了哈哈毕竟不是java么哈哈

今天写到这里了 我要下班了 7.3

异常处理
就是程序中要处理特殊情况的办法

1. 定义异常处理
定义异常处理的语法如下:
declare
异常名 exception;
2. 触发异常处理
触发异常处理的语法如下:
raise 异常名;
3. 处理异常
触发异常处理后,可以定义异常处理部分,语法如下:
Exception
When 异常名 1 then
异常处理语句段 1;
When 异常名 2 then
异常处理语句段 2;

下面的 PL/SQL 程序包含了完整的异常处理定义、触发、处理的过程。定义名为 salaryerror
的异常,在 scott.emp 数据表中查找 empno=7566 的记录,将其值放入变量 tempsal 中,判断
tempsal 值若不在 900 和2600 之间,说明该员工的薪水有问题,将激活异常处理,提示信息。

set serveroutput on
declare
salaryerror exception;
tempsal scott.emp.sal%type;
begin
select sal into tempsal
from scott.emp
where empno=7566;
if tempsal 2600 then
raise salaryerror;
end if;
exception
when salaryerror then
dbms_output.put_line('薪水超出范围');
end;
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

說明InnoDB重做日誌和撤消日誌的作用。 說明InnoDB重做日誌和撤消日誌的作用。 Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL:從小型企業到大型企業 MySQL:從小型企業到大型企業 Apr 13, 2025 am 12:17 AM

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

MySQL索引基數如何影響查詢性能? MySQL索引基數如何影響查詢性能? Apr 14, 2025 am 12:18 AM

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

初學者的MySQL:開始數據庫管理 初學者的MySQL:開始數據庫管理 Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL與其他數據庫:比較選項 MySQL與其他數據庫:比較選項 Apr 15, 2025 am 12:08 AM

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

See all articles