(Translated by https://www.hiragana.jp/)
PL-SQL - 维基百科,自由的百科全书

PL-SQL

编程语言
重定しげさだこうPL/SQL

PL/SQL(Procedural Language/SQL)これかぶとこつぶん公司こうし專有せんゆうてきSQL擴展げん應用おうようざいかぶとこつぶん公司こうしてきOracleかずすえ系統けいとういち些的SQLかずすえ管理かんり系統けいとう提供ていきょうりょう類似るいじてき擴展SQLげん。PL/SQLてき語法ごほう非常ひじょう類似るいじAda,而且ぞう1980年代ねんだいてきAdaへんやくいちよう,PL/SQLてきうんさく系統けいとう使用しようDiana作為さくいちゅうかいげん

重要じゅうようてきPL/SQL緊密きんみつてき結合けつごうざいOracleかずすえ库裡めん

PL/SQLOracleかずよりどころ使用しようてき三種語言的其中之一,另外兩個りゃんこSQLJava

歷史れきし

编辑

特性とくせい

编辑

SQL连接操作そうさ

编辑

Oracle连接操作そうさ(left join ,right join,full join)てき语法确与SQL标准完全かんぜん不同ふどうぼつゆうひだり连接あずかみぎ连接てき概念がいねん,也不支持しじぜんそと连接。Oracle语法如下しょしめせ

 select * from t1,t2 where t1.id=t2.id(+)

さいよう(+)らい表示ひょうじがい连接,ざいOracleちゅう它相とう于左连接。Oracle9iちゅう增加ぞうかりょう标准がい连接てき语法支持しじただし使用しよう广。

もの视图

编辑

もの视图(materialized view)ある译为实体视图。あずか普通ふつう视图关系不同ふどうもの视图さらぞういち个表,保存ほぞんりょう实实ざいざいてきすうすえ,并且以与ひょう一样定义存储参数,以与ひょういち使用しようselect,insert,update,delete。ざい其它すうすえ库中也有やゆう和物あえもの视图相似そうじてきかい决方あん,DB2さけべぶつ查询ひょう(materialized query table),sqlserverゆう索引さくいん视图,ただし索引さくいん视图仅是おこり优化作用さようあずかoracleてきもの视图还不太一たいち样。

かずすえ类型

编辑

かず值类がた

编辑

さいよう本地ほんじてきnumber类型做指すうある对数运算,あずか标准てき浮点すう性能せいのう可能かのうかい相差おうさつ50ばいこうざいOracle10gちゅう增加ぞうかりょうだかこうてき浮点类型binary_float,binary_double,从而わたる补了浮点すう性能せいのうてき问题。

variable_name number[([P][, S])] = 0;
  • NUMBER指定していprecision (P)あずかscale (S)。精度せいど表示ひょうじ十进制有效数字的个数,最多さいた不能ふのうちょう过38个有效ゆうこう数字すうじ(实际支持しじ39-40じゅう进制数字すうじ[註 1]。Scaleてき范围为[-84,127]。Scale为正すう时,表示ひょうじ从小すうてんいたさい重要じゅうようてき十进制有效数字的个数;为负すう时,其绝对值表示ひょうじ从最重要じゅうようてき十进制有效数字到小数点的位数。如果ぼつゆう指定してい精度せいど,precisionあずかscaleだま认为最大さいだいてき值区间。如果指定していりょう精度せいどぼつゆう指定していscale,scaleだま认为0。内部ないぶそん储格しき变长阿ひしげはく数字すうじてき节数组:
    • くび节为长度值,最大さいだい22;如果为NULL,则该节值为255(0xFF)
    • だい二字节是符号和指数字节(sign bit/exponent),其最だかとく为符ごう,1表示ひょうじ正数せいすう,0表示ひょうじ负数;其余7とく构成もと为100てき指数しすう值,值范围[-65,62],NUMBERすうすえ类型てき值范围为[10-130,10126);
      • だい二字节值大于128,则:指数しすう值=节值 - 128 - 64= 节值-192,そくじょ符号ふごうとくきさきへんうつりりょう64。节值最大さいだい为254
      • だい二字节值等于128,则NUMBERすうすえ类型表示ひょうじ值0
      • だい二字节值小于128,则:指数しすう值=(255-节值)-128-64=63-ZV,そくはんきさきじょ符号ふごうとくさいへんうつり64
    • 其余保存ほぞんりょう基数きすう为100てきすう值00-99
      • 对于正数せいすう:实际值=そん储值-1
      • 对于负数:实际值=そん储值-101;节值102 (0x66)标志节数组的结束。[1]
      • 两个节255あずか101表示ひょうじせい无穷
      • 单字节0表示ひょうじ负无穷
  • INTEGERNUMBERてき类型,它等どう于NUMBER(38,0),もちいらいそん储整すうわか插入そうにゅう更新こうしんてきすう值有小数しょうすう,则会よんしゃいれ
  • FLOAT类型也是NUMBERてき类型。Float(n),かず n 指示しじてき精度せいど以存储的值的すうもく。n 值的范围以从 1 いた 126。わかよう从二进制转换为十进制的精度,请将 n 以 0.30103。よう从十进制转换为二进制的精度,请用 3.32193 じょう小数しょうすう精度せいど。126 二进制精度的最大值是大约相当于 38 小数しょうすう精度せいど
  • BINARY_FLOAT 32 、 单精度せいど浮点数字すうじすうすえ类型。支持しじいたりしょう6精度せいど,まい个 BINARY_FLOAT てき需要じゅよう 5 个字节,包括ほうかつ长度节。
  • BINARY_DOUBLE 为 64 そう精度せいど浮点数字すうじすうすえ类型。まい个 BINARY_DOUBLE てき需要じゅよう 9 个字节,包括ほうかつ长度节。

其它すう值类がた: dec, decimal, double precision, int, numeric, real, smallint, binary_integer.

类型

编辑

くしすうすえ类型すえそん储空间分为两种:

  • 固定こてい长度类型:CHAR/NCHAR,动补あしそらかく最多さいた以存储2,000
  • 变长类型:VARCHAR2/NVARCHAR2,最大さいだい节数4000,动删じょ首尾しゅびてきそらかく

くしてき开头そん储了くしてき长度。如果くしてき长度しょう于或とう于250(0x01~0xFA), Oracle かい使用しよう1 个字节来表示ひょうじ长度。对于所有しょゆう长度ちょう过250 てきくし都会とかいざい一个标志字节0xFE きさき跟有两个节来表示ひょうじ长度。

chr(0)表示ひょうじてき不可ふか见字そくわが通常つうじょうしょ说的\0

  • CHAR类型: CHAR(size [BYTE | CHAR]) 固定こてい长度くし
  • NCHAR类型: すえしゅう而定てきUNICODE格式かくしき固定こてい长度くし 最大さいだい长度2000 bytes。
  • VARCHAR类型: けん使用しよう。虽然VARCHARすうすえ类型目前もくぜんVARCHAR2てきどう义词,VARCHARすうすえ类型はたじゅう新定しんじょう义为一个单独的数据类型用于可变长度的字符串相比,あずかVARCHAR2具有ぐゆう不同ふどうてき较语义
  • varchar2类型:变长くし
  • nvarchar2()类型:包含ほうがんUNICODE格式かくしきすうすえてき变长くし
--  だんtranslated_nameNCHAR类型,则需よう如下书写:
SELECT translated_description FROM product_descriptions 
WHERE translated_name = N'LCD Monitor 11/PM';  

variable_name varchar2(20) = 'Text';

-- e.g.: 
address varchar2(20) := 'lake view road';

にち类型

编辑
variable_name date = to_date('01-01-2005 14:20:23', 'DD-MM-YYYY hh24:mi:ss');
  • Date类型表示ひょうじあずか时间。精度せいどいたびょうにち范围以是こうもとまえ4712ねん1がつ1にちいたりこうもと9999ねん12月31にちうらないよう7个字节的そん储空间。だい1节:纪+100;だい2节:としだい3节:つきだい4节:てんだい5节:しょう时+1; だい6节:ぶん+1;だい7节:びょう+1。其中时间以忽りゃくただし无法ただ表示ひょうじ时间而忽りゃくOracle Datatypes页面そん档备份そん互联网档あん
  • TIMESTAMP类型:7节或11节的てい宽日/时间すうすえ类型。包含ほうがんしょうすうびょうしょうすうすう指定してい为0-9,だま认为6所以ゆえん最高さいこう精度せいど以到ns(纳秒).如果精度せいど为0,则用7节存储,あずかdate类型こうのうしょうどう,如果精度せいどだい于0则用11节存储。
  • TIMESTAMP WITH TIME ZONE类型:TIMESTAMP类型てき变种,它包含ほうがんりょう时区へんうつり量的りょうてき
  • TIMESTAMP WITH LOCAL TIME ZONE类型:
  • INTERVAL YEAR TO MOTH:
  • INTERVAL DAY TO SECOND:

函数かんすうTO_DATEくし转换为日值。

 to_date('31-12-2004', 'dd-mm-yyyy')

 to_date ('31-Dec-2004', 'dd-mon-yyyy', 'NLS_DATE_LANGUAGE = American')

函数かんすうTO_CHAR (date_string, format_string)值转换为くし

PL/SQL支持しじ使用しようANSIあずか时间间隔值[2] The following clause gives an 18-month range:

しめせれい

WHERE dateField BETWEEN DATE '2004-12-30' - INTERVAL '1-6' YEAR TO MONTH
    AND DATE '2004-12-30'
create table T
(
   C1 DATE,
   C2 TIMESTAMP(9)
);
 
insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211');
insert into t(c1,c2) values(
        to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),
        to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')
);
 
SQL> select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;
  • sysdate--かえしかいとうまえけい统日时间,せい确到びょう
  • systimestamp--かえしかいとうまえけい统日时间,せい确到毫秒

にちがたすうすえ以与すう值加减得いたしんまと减数值单为天

  • sysdate+1--明天めいてんてきとうぜん时间
  • sysdate-1/24--とうぜん时间てきまえいち个小时

LOB类型

编辑

うちおけてきLOBすうすえ类型包括ほうかつBLOB、CLOB、NCLOB、BFILE(外部がいぶそん储)てき大型おおがた结构すうすえ,如文ほん、图像、视屏、そら间数すえそん储。

  • BLOB すうすえ类型:そん储非结构てき二进制数据大对象,它可以被认为ぼつゆうしゅう语义てきとくりゅう一般いっぱん图像、声音こわね、视频とうぶんけん。BLOB对象最多さいたそん储(4 gigabytes-1) * (database block size)てき进制すうすえ
  • CLOB すうすえ类型:そん储单节和节字すうすえ支持しじ固定こてい宽度变宽てきしゅう。CLOB对象以存储最多さいた (4 gigabytes-1) * (database block size) 大小だいしょうてき
  • NCLOB すうすえ类型:そん储UNICODE类型てきすうすえ支持しじ固定こてい宽度变宽てきしゅう,NCLOB对象以存储最多さいた(4 gigabytes-1) * (database block size)大小だいしょうてきぶん本数ほんすうすえ
  • BFILE すうすえ类型:そん储在すうすえ库外てき进制ぶんけんただ读,最大さいだい长度4G

LONG类型,RAW类型,LONG RAW类型

编辑

ひとし为较ろうてきすうすえ类型,Oracleけん使用しよう

  • LONG类型そん储变长字くし最多さいた达2Gてき节数すえそん储在LONG 类型ちゅうてきぶんほんよう进行しゅう转换。支持しじLONG れつただ为了证向きさきけんようせい。LONG类型てききりせい如下:
    • 一个表中只有一列可以为LONGがた
    • LONGれつ不能ふのうてい义为ぬし键或唯一ゆいいつ约束
    • 不能ふのう建立こんりゅう索引さくいん
    • LONGすうすえ不能ふのう指定していせい则表达式。
    • 函数かんすうあるそん储过ほど不能ふのう接受せつじゅLONGすうすえ类型てきさんすう
    • LONGれつ不能ふのう现在WHEREあるかんせいせい约束(じょりょう可能かのうかい现NULLNOT NULL约束)
  • LONG RAW 类型,のうそん储2GB てき原始げんし进制すうすえ不用ふよう进行しゅう转换てきすうすえ
  • RAW类型よう于存储二进制或字符类型数据,变长二进制数据类型,这说あかりさいよう这种すうすえ类型そん储的すうすえかい发生しゅう转换。这种类型最多さいた以存储2,000节的しんいき

ROWID & UROWID类型

编辑

ざいすうすえ库中てきごといちぎょうみやこ有一ゆういち个地しか而,一些表行的地址不是物理或永久的,あるものORACLEすうすえ生成せいせいてきれい如,索引さくいん组织ひょう行地ゆくじそん储在索引さくいんてきかのう以移动。れい如,外部がいぶひょうてきROWID(如通过网关访问DB2ひょう标准てきORACLEてきrowid。

ORACLE使用しよう通用つうようてきROWID(UROWIDs)てきそん储地てき索引さくいん组织ひょう外表そとおもて。10个字节,格式かくしき为: ********.****.****,*为0ある1。NROWID类型为二进制数据表中记录的唯一行号,最大さいだい长度4000

索引さくいん组织ひょうゆう逻辑urowidsてき外表そとおもててきそとurowids。UROWID这两种类がたてきそん储在ROWID(うずたか组织てきひょうてき物理ぶつりぎょうid)。

创建もと于逻辑的rowidざいひょうちゅうてきしゅ键。逻辑てきrowidかいあらため变,ただようしゅ键不あらため变。索引さくいん组织ひょうてきROWID伪UROWIDすうすえ类型。你可以访问这个伪れつ,你会うずたか组织ひょうてきROWID伪(そく使用しよういち个SELECT ...ROWID语句)。如果你想そん储的rowid索引さくいん组织ひょう么你就可以定义一れつてきひょうがたUROWIDいたれつ检索值的ROWID伪。

指定していれつてきすうすえ类型

编辑

てい义一个变りょう,其类がた指定していひょうてき指定していれつてきすうすえ类型:

Variable_name Table_name.Column_name%type;

てい义类がた

编辑

ほどじょ员自てい义类がた

type data_type is record (field_1 type_1 = xyz, field_2 type_2 := xyz, ..., field_n type_n = xyz);

れい如:

declare
    type t_address is record (
        name address.name%type,
        street address.street%type,
        street_number address.street_number%type,
        postcode address.postcode%type);
    v_address t_address;
begin
    select name, street, street_number, postcode into v_address from address where rownum = 1;
end;

使用しようてん表示ひょうじ(dot-notation)获取结构ちゅうてきいき

v_address.street = 'High Street';"

ぞう长数すえ类型

编辑

Oracleてきすうすえ类型さとぼつゆうぞう长(auto-incremental)だん类型,Oracleてきかんかたかい决方あんさいようsequence实现。insertてき时候需要じゅようようsequence.nextval。需要じゅよう增加ぞうか一张专用表来保存自增长字段的表和字段名,每次まいじしんぞう记录时都这个记录值加1さい取出とりで使用しよう

基本きほんほどしき

编辑

条件じょうけん语句

编辑

以下いかてきだい展示てんじりょうIF-THEN-ELSIF结构。ELSIFELSE部分ぶぶん选的,从而以创けんさら简单てきIF-THENあるものIF-THEN-ELSE结构。

IF x = 1 THEN
   sequence_of_statements_1;
ELSIF x = 2 THEN
   sequence_of_statements_2;
ELSIF x = 3 THEN
   sequence_of_statements_3;
ELSIF x = 4 THEN
   sequence_of_statements_4;
ELSIF x = 5 THEN
   sequence_of_statements_5;
ELSE
   sequence_of_statements_N;
END IF;

CASE语句简化りょういち些大てきIF-THEN-ELSE结构。

CASE
   WHEN x = 1 THEN sequence_of_statements_1;
   WHEN x = 2 THEN sequence_of_statements_2;
   WHEN x = 3 THEN sequence_of_statements_3;
   WHEN x = 4 THEN sequence_of_statements_4;
   WHEN x = 5 THEN sequence_of_statements_5;
   ELSE sequence_of_statements_N;
END CASE;

CASE语句使用しよう预定义的选择

CASE x
   WHEN 1 THEN sequence_of_statements_1;
   WHEN 2 THEN sequence_of_statements_2;
   WHEN 3 THEN sequence_of_statements_3;
   WHEN 4 THEN sequence_of_statements_4;
   WHEN 5 THEN sequence_of_statements_5;
   ELSE sequence_of_statements_N;
END CASE;

陣列じんれつ

编辑

PL/SQL しょうすう组称为“集合しゅうごう”(collection)。 该语げん提供ていきょうさん种类がたてき集合しゅうごう

  • 关联すう索引さくいんひょう
  • はま套表
  • Varray(变大小数しょうすう组)

ほどじょ员必须为变量指定してい上限じょうげんただし需要じゅよう索引さくいんひょうあるはま套表指定してい上限じょうげん。 该语げん包含ほうがん种用于操作そうさ集合しゅうごう元素げんそてき集合しゅうごう方法ほうほうれい如 FIRST、LAST、NEXT、PRIOR、EXTEND、TRIM、DELETE とう索引さくいんひょう可用かよう于模拟关联数组。

关联すう组(索引さくいんひょう

编辑

对于索引さくいんひょう以通过数字すうじあるくし对数组进ぎょう索引さくいん。 它与Javaうつ类似,ゆかり键值对组なりただゆういち维且无界。

はま套表

编辑

对于はま套表えいNested SQLほどじょ员需よう了解りょうかいはま套的内容ないようざい这里,创建りょう一个可能由多个组件组成的新类型。 しかきさき使用しよう该类がたざいひょうちゅう创建いちれつ,并在该列ちゅうはま套这些组けん。 With nested tables the programmer needs to understand what is nested. Here, a new type is created that may be composed of a number of components. That type can then be used to make a column in a table, and nested within that column are those components.

Varray(变大小数しょうすう组)

编辑

对于 Varray,需要じゅよう了解りょうかい变大小数しょうすう组”たん语中てき“变量”一词并不像想象的那样适用于数组的大小。 声明せいめいすう组的大小だいしょう实际じょう固定こていてきかず组中元素げんそてき数量すうりょう变的,最多さいた声明せいめいてき大小だいしょう以说,变大しょうてきすう组的大小だいしょう并不么可变。

迴圈

编辑

从过ほど语言てき,PL/SQL提供ていきょうりょう种迭だい结构,包括ほうかつ基本きほんてきLOOP语句、WHILE 循环、FOR循环Cursor FOR循环。 从 Oracle 7.3 开始,引入りょうREF CURSOR 类型,以允许从そん储过ほど函数かんすうかえしかい记录しゅう。 Oracle 9i引入りょう预定义的SYS_REFCURSOR类型,这意味いみわが们不さい需要じゅようてい自己じこてき REF CURSOR 类型。

如果退出たいしゅつ循环,则必须使用しようexit语句终止循环。exit语句ぶん两种格式かくしき

exit:该格しきてき语句よう于无条件じょうけん强迫きょうはく终止循环。
exit...when:该格しきよう于有条件じょうけん终止循环,しゅさき检测whenてき条件じょうけん满足。

れい1:

loop
    if...then exit;
    end if;
end loop;

れい2:

loop
   exit when;
end loop;

LOOP语句

编辑
<<parent_loop>>
LOOP
	statements

	<<child_loop>>
	loop
		statements
		exit parent_loop when <condition>; -- Terminates both loops
		exit when <condition>; -- Returns control to parent_loop
	end loop child_loop;
        if <condition> then
           continue; -- continue to next iteration
        end if;

	exit when <condition>;
END LOOP parent_loop;

[3]

Loop可用かようEXIT关键あるほう异常らい终止。

FOR循环

编辑
DECLARE
    var NUMBER;
BEGIN
    /* N.B. for loop variables in PL/SQL are new declarations, with scope only inside the loop */
    FOR var IN 0 .. 10 LOOP
        DBMS_OUTPUT.PUT_LINE(var);
    END LOOP;

    IF var IS NULL THEN
        DBMS_OUTPUT.PUT_LINE('var is null');
    ELSE
        DBMS_OUTPUT.PUT_LINE('var is not null');
    END IF;
END;

输出:

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 var is null


for...loop循环限定げんてい循环てき次数じすうれい如:

declare
  div_name varchar2(20);
  div_num integer:=1;
begin
  for div_num in 1..9 loop
      select name into div_name from div_tab where div_author='A000'||to_char(div_num);
  end loop;
end;

れい如:

declare
   div_name varchar2(20);
   div_num integer=1;
begin
   for div_num in 1..9 loop
        EXIT WHEN div_num >7;
        DBMS_OUTPUT.put_line(div_num);
   end loop;
end;

Cursor FOR循环

编辑
FOR RecordIndex IN (SELECT person_code FROM people_table)
LOOP
  DBMS_OUTPUT.PUT_LINE(RecordIndex.person_code);
END LOOP;

Cursor-for循环动打开一个cursor,读入其数すえ并再关闭ゆう标。

さく为替だい方案ほうあん,PL/SQL ほどじょ员可以提ぜん预定义游标的 SELECT 语句,以(れい如)まこと许重ようある使つかいだい码更えき理解りかいざい长查询或复杂查询てきじょう况下とく别有よう)。

DECLARE
  CURSOR cursor_person IS
    SELECT person_code FROM people_table;
BEGIN
  FOR RecordIndex IN cursor_person
  LOOP
    DBMS_OUTPUT.PUT_LINE(recordIndex.person_code);
  END LOOP;
END;

FOR 循环ちゅう person_code てき概念がいねんようてん符号ふごう(“.”)表示ひょうじ:

RecordIndex.person_code

while循环

编辑
while...loop;

while...loop循环ざい执行语句时,しゅさき检测条件じょうけんてき值。れい如:

declare
  div_name varchar2(20);
  div_num integer=1;
begin
  while div_num<10 loop
    select name into div_name from div_tab where div_author ='A000'||to_char(div_num);
    div_num=div_num+1;
  end loop;
end;

ゆう

编辑

ゆう指向しこう私有しゆうSQL区域くいきてきゆび针,该区域くいきそん储来SELECTあるかずすえ操作そうさ语言(DML)语句(INSERT、UPDATE、DELETE ある MERGE)てきしんいきゆう保存ほぞんSQL语句かえしかいてきぎょういちぎょうあるくだり)。ゆう标所保存ほぞんてきぎょうしゅうしょう为活动集(active set)。[4]

ゆう标可以是显式てきある隐式てきざいFOR循环ちゅう,如果よう重用じゅうよう查询,则应使用しよう显式ゆう标,いや则首选隐しきゆう标。如果ざい循环ない使用しようゆう标,则在需要じゅよう批量收集しゅうしゅうある需要じゅよう动态SQL时,けん使用しよう FETCH。

create or replace procedure test() IS 
cusor_1 Cursor is select std_name from student where ...; --Cursor てき使用しよう方式ほうしき1 
cursor_2 Cursor; 
begin 
select class_name into cursor_2 from class where ...; --Cursor てき使用しよう方式ほうしき2 

-- 使用しようFor x in cursor LOOP .... end LOOP; らい实现对Cursor てきへん

end test; 


-- SYS_REFCURSOR がたゆう标,该游标是Oracle 以预さきてい义的ゆう标,作出さくしゅつさんすう进行传递 
create or replace procedure test1(rsCursor out SYS_REFCURSOR) IS 
cursor SYS_REFCURSOR; 
name varhcar(20); 
begin 
OPEN cursor FOR select name from student where ... --SYS_REFCURSOR ただのうどおり过OPEN 方法ほうほう开和赋值 
LOOP 
    fetch cursor into name -- SYS_REFCURSOR ただのうどおり过fetch into 开和へん
    exit when cursor%NOTFOUND; 
    --SYS_REFCURSOR ちゅう使用しようさん个状态属せい
         ---%NOTFOUND( 找到记录しんいき) %FOUND( 找到记录しんいき) 
         ---%ROWCOUNT( しかきさきとうぜんゆう标所指向しこうてきぎょう位置いち) 
    dbms_output.putline(name); 
end LOOP; 
rsCursor := cursor; 
end test1;

そん储过ほど

编辑

查看そん储过ほど

select text
from USER_SOURCE
where name='My_Store_Precedure_Name'
order by LINE;

類似るいじてきげん

编辑

こうのう近似きんじPL/SQLてきほどじょげんかず其他關係かんけいがた資料しりょう

PL/SQL てき工作こうさく方式ほうしき类似于与其他关系すうすえ库关联的嵌入かんにゅうしき过程语言。 れい如,Sybase ASE Microsoft SQL Server 具有ぐゆう Transact-SQL,PostgreSQL 具有ぐゆう PL/pgSQLざい一定いってい程度ていどじょう拟 PL/SQL),MariaDB 包括ほうかつ PL/SQL けんようせい解析かいせき,而 IBM Db2 包括ほうかつ SQL 过程语言,符合ふごうISO SQLてきSQL/PSM标准。

PL/SQLてき设计しゃはた其语ほうけんAdaてき语法。 Ada PL/SQLPascalげんさく共同きょうどうてき祖先そせんいん此 PL/SQL ざいだい多数たすう方面ほうめん也类于 Pascal。 しか而,PL/SQL つつみてき结构あずか Borland Delphi あるFree Pascal 单元实现てき基本きほん Object Pascal ほどじょ结构并不相似そうじほどじょ员可以在 PL/SQL つつみちゅうてい义公共和きょうわ私有しゆう全局ぜんきょくすうすえ类型、つねりょうかずしず态变りょう

PL/SQL 还允许定义类并将它们实例为 PL/SQL だい码中てき对象。 这类于面こう对象编程语言(如 Object Pascal、C++ かず Java)ちゅうてき用法ようほう。 PL/SQL はた类称为“抽象ちゅうしょうすうすえ类型”(ADT) あるよう户定义类がた”(UDT),并将其定义为 Oracle SQL すうすえ类型而不 PL/SQL よう户定义类がた,从而まこと许 它在 Oracle SQL 引擎 Oracle PL/SQL 引擎ちゅうてき使用しよう抽象ちゅうしょうすうすえ类型てき构造函数かんすう方法ほうほうよう PL/SQL 编写てき生成せいせいてき抽象ちゅうしょうすうすえ类型以作为 PL/SQL ちゅうてき对象类进ぎょう操作そうさ。 此类对象还可以作为 Oracle すうすえ库表ちゅうてきれつ保留ほりゅう

つきかん表面ひょうめんじょう相似そうじただし PL/SQL あずか Transact-SQL ほん质上不同ふどうてきはただい码从一种语言移植到另一种语言通常涉及不平凡的工作,这不仅是いん为两种语げんてきこうのうしゅう存在そんざい异,还因为 Oracle SQL Server 处理并发てき方式ほうしき存在そんざい非常ひじょう显着てき锁定。

ちゅう

编辑
  1. ^ p精度せいどそく十进制数字的有效位数,其中さい重要じゅうよう有效ゆうこう数字すうじざいさいひだり边的れい数字すうじさい重要じゅうよう有效ゆうこう数字すうじさいみぎ边的数字すうじ。Oracle数字すうじ移植いしょくせい,其精度せいど达基于100进制てき20个数字すうじ(centesimal digit),这等こう于依赖小すうてん位置いちてき39ある40じゅう进制数字すうじ原文げんぶん:p is the precision, or the total number of significant decimal digits, where the most significant digit is the left-most nonzero digit, and the least significant digit is the right-most known digit. Oracle guarantees the portability of numbers with precision of up to 20 base-100 digits, which is equivalent to 39 or 40 decimal digits depending on the position of the decimal point.

參考さんこう文献ぶんけん

编辑
  1. ^ Oracle Ducuments about Data Type. [2017-08-14]. (原始げんし内容ないようそん于2017-07-10). 
  2. ^ Literals. Oracle Database SQL Reference 10g Release 2 (10.2). Oracle. [2009-03-20]. (原始げんし内容ないようそん于2009-03-18). 
  3. ^ Database PL/SQL User's Guide and Reference. download.oracle.com. [2023-10-17]. (原始げんし内容ないようそん于2011-10-28). 
  4. ^ Feuerstein, Steven. Working with Cursors. oracle.com. [2023-10-17]. (原始げんし内容ないようそん于2018-03-30). 
  5. ^ SQL PL

外部がいぶ連結れんけつ

编辑

まいり

编辑