當前位置:首頁 » 編程語言 » plsql常量

plsql常量

發布時間: 2022-07-04 01:13:07

1. PLsql中的'的轉義關系

1. || 的作用是連接字元串。
如:
字元串常量連接: 'abc'||'def' ;
字元串變數連接: v_variable1 || v_variable2 等。

2.
首先: ' 有兩個作用:
1).對字元串定界。如v_sqlstr := 'abcdef';
就界定了一個字元串abcdef; 『 本身不是字元串的一部份。
2). ' 本身作為一個字元,' 是字元串的一部份。
如 :v_sqlstr :=''''; 指代字元串' 。 這時,' 需要轉義。
begin
dbms_output.put_line('''');
end;
/
'

PL/SQL procere successfully completed.

要表示一個' 字元 , plsql中需要用'' 來表示。
『』 相當於 字元 『 。

輸出字元a:
dbms_output.put_line('a');

輸出字元『:
dbms_output.put_line('''');

3. 開始的alter前面的'不用轉義,
因為它是定界符。

4.我們知道:
alter session set nls_date_language='AMERICAN';

是完整的sql語句,

其中的兩個' 在sql 中 ,是定界符,但是到了plsql中,整個sql語句成了一個字元串,所以'成為了兩個字元。
字元就需要轉義,
所以:
nls_date_language='
在plsql字元串中應該寫成:
nls_date_language=''

5. 如果我們做如下置換:
假設:表定界的' 可以用 () 來置換,
表字元的' 可以用 " 來置換,那麼:
sql_string 可以寫成:

sql_string := (alter session set nls_date_language=")||(AMERICAN)||(");

這樣就更好理解了。

2. 關於oracle PLSQL

PL/SQL是ORACLE對標准資料庫語言的擴展,ORACLE公司已經將PL/SQL整合到ORACLE 伺服器和其他工具中了,近幾年中更多的開發人員和DBA開始使用PL/SQL,本文將講述PL/SQL基礎語法,結構和組件、以及如何設計並執行一個PL/SQL程序。

PL/SQL的優點

從版本6開始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的優點以及其獨有的數據管理的便利性,那麼你很難想像ORACLE缺了PL/SQL的情形。PL/SQL 不是一個獨立的產品,他是一個整合到ORACLE伺服器和ORACLE工具中的技術,可以把PL/SQL看作ORACLE伺服器內的一個引擎,sql語句執行者處理單個的sql語句,PL/SQL引擎處理PL/SQL程序塊。當PL/SQL程序塊在PL/SQL引擎處理時,ORACLE伺服器中的SQL語句執行器處理pl/sql程序塊中的SQL語句。

PL/SQL的優點如下:

. PL/SQL是一種高性能的基於事務處理的語言,能運行在任何ORACLE環境中,支持所有數據處理命令。通過使用PL/SQL程序單元處理SQL的數據定義和數據控制元素。

. PL/SQL支持所有SQL數據類型和所有SQL函數,同時支持所有ORACLE對象類型

. PL/SQL塊可以被命名和存儲在ORACLE伺服器中,同時也能被其他的PL/SQL程序或SQL命令調用,任何客戶/伺服器工具都能訪問PL/SQL程序,具有很好的可重用性。

. 可以使用ORACLE數據工具管理存儲在伺服器中的PL/SQL程序的安全性。可以授權或撤銷資料庫其他用戶訪問PL/SQL程序的能力。

. PL/SQL代碼可以使用任何ASCII文本編輯器編寫,所以對任何ORACLE能夠運行的操作系統都是非常便利的

. 對於SQL,ORACLE必須在同一時間處理每一條SQL語句,在網路環境下這就意味作每一個獨立的調用都必須被oracle伺服器處理,這就佔用大量的伺服器時間,同時導致網路擁擠。而PL/SQL是以整個語句塊發給伺服器,這就降低了網路擁擠。

PL/SQL塊結構

PL/SQL是一種塊結構的語言,組成PL/SQL程序的單元是邏輯塊,一個PL/SQL 程序包含了一個或多個邏輯塊,每個塊都可以劃分為三個部分。與其他語言相同,變數在使用之前必須聲明,PL/SQL提供了獨立的專門用於處理異常的部分,下面描述了PL/SQL塊的不同部分:

聲明部分(Declaration section)

聲明部分包含了變數和常量的數據類型和初始值。這個部分是由關鍵字DECLARE開始,如果不需要聲明變數或常量,那麼可以忽略這一部分;需要說明的是游標的聲明也在這一部分。

執行部分(Executable section)

執行部分是PL/SQL塊中的指令部分,由關鍵字BEGIN開始,所有的可執行語句都放在這一部分,其他的PL/SQL塊也可以放在這一部分。

異常處理部分(Exception section)

這一部分是可選的,在這一部分中處理異常或錯誤,對異常處理的詳細討論我們在後面進行。

PL/SQL塊語法

[DECLARE]
---declaration statements
BEGIN
---executable statements
[EXCEPTION]
---exception statements
END

PL/SQL塊中的每一條語句都必須以分號結束,SQL語句可以使多行的,但分號表示該語句的結束。一行中可以有多條SQL語句,他們之間以分號分隔。每一個PL/SQL塊由BEGIN或DECLARE開始,以END結束。注釋由--標示。

PL/SQL塊的命名和匿名

PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊。匿名程序塊可以用在伺服器端也可以用在客戶端。

命名程序塊可以出現在其他PL/SQL程序塊的聲明部分,這方面比較明顯的是子程序,子程序可以在執行部分引用,也可以在異常處理部分引用。

PL/SQL程序塊可背獨立編譯並存儲在資料庫中,任何與資料庫相連接的應用程序都可以訪問這些存儲的PL/SQL程序塊。ORACLE提供了四種類型的可存儲的程序:

. 函數

. 過程

. 包

. 觸發器

函數

函數是命名了的、存儲在資料庫中的PL/SQL程序塊。函數接受零個或多個輸入參數,有一個返回值,返回值的數據類型在創建函數時定義。定義函數的語法如下:

FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]

過程

存儲過程是一個PL/SQL程序塊,接受零個或多個參數作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函數不同,存儲過程沒有返回值,存儲過程不能由SQL語句直接使用,只能通過EXECUT命令或PL/SQL程序塊內部調用,定義存儲過程的語法如下:

PROCEDURE name [(parameter[,parameter,...])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]

包(package)

包其實就是被組合在一起的相關對象的集合,當包中任何函數或存儲過程被調用,包就被載入入內存中,包中的任何函數或存儲過程的子程序訪問速度將大大加快。
包由兩個部分組成:規范和包主體(body),規范描述變數、常量、游標、和子程序,包體完全定義子程序和游標。

觸發器(trigger)

觸發器與一個表或資料庫事件聯系在一起的,當一個觸發器事件發生時,定義在表上的觸發器被觸發。

變數和常量

變數存放在內存中以獲得值,能被PL/SQL塊引用。你可以把變數想像成一個可儲藏東西的容器,容器內的東西是可以改變的。

聲明變數

變數一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強壯的類型語言,這就是說在引用變數前必須首先聲明,要在執行或異常處理部分使用變數,那麼變數必須首先在聲明部分進行聲明。

聲明變數的語法如下:

Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]

注意:可以在聲明變數的同時給變數強制性的加上NOT NULL約束條件,此時變數在初始化時必須賦值。

給變數賦值

給變數賦值有兩種方式:

. 直接給變數賦值

X:=200;
Y=Y+(X*20);

. 通過SQL SELECT INTO 或FETCH INTO給變數賦值

SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;

常量

常量與變數相似,但常量的值在程序內部不能改變,常量的值在定義時賦予,,他的聲明方式與變數相似,但必須包括關鍵字CONSTANT。常量和變數都可被定義為SQL和用戶定義的數據類型。

ZERO_VALUE CONSTANT NUMBER:=0;

這個語句定了一個名叫ZERO_VALUE、數據類型是NUMBER、值為0的常量。

標量(scalar)數據類型

標量(scalar)數據類型沒有內部組件,他們大致可分為以下四類:

. number
. character
. date/time
. boolean

表1顯示了數字數據類型;表2顯示了字元數據類型;表3顯示了日期和布爾數據類型。

表1 Scalar Types:Numeric

Datatype
Range
Subtypes
description

BINARY_INTEGER
-214748-2147483647
NATURAL
NATURAL
NPOSITIVE
POSITIVEN
SIGNTYPE
用於存儲單位元組整數。
要求存儲長度低於NUMBER值。
用於限制范圍的子類型(SUBTYPE):
NATURAL:用於非負數
POSITIVE:只用於正數
NATURALN:只用於非負數和非NULL值
POSITIVEN:只用於正數,不能用於NULL值
SIGNTYPE:只有值:-1、0或1.

NUMBER
1.0E-130-9.99E125
DEC
DECIMAL
DOUBLE
PRECISION
FLOAT
INTEGERIC
INT
NUMERIC
REAL
SMALLINT
存儲數字值,包括整數和浮點數。可以選擇精度和刻度方式,語法:
number[([,])]。
預設的精度是38,scale是0.

PLS_INTEGER
-2147483647-2147483647

與BINARY_INTEGER基本相同,但採用機器運算時,PLS_INTEGER提供更好的性能 。

表2 字元數據類型

datatype
rang
subtype
description

CHAR
最大長度32767位元組
CHARACTER
存儲定長字元串,如果長度沒有確定,預設是1

LONG
最大長度2147483647位元組

存儲可變長度字元串

RAW
最大長度32767位元組

用於存儲二進制數據和位元組字元串,當在兩個資料庫之間進行傳遞時,RAW數據不在字元集之間進行轉換。

LONGRAW
最大長度2147483647

與LONG數據類型相似,同樣他也不能在字元集之間進行轉換。

ROWID
18個位元組

與資料庫ROWID偽列類型相同,能夠存儲一個行標示符,可以將行標示符看作資料庫中每一行的唯一鍵值。

VARCHAR2
最大長度32767位元組
STRINGVARCHAR
與VARCHAR數據類型相似,存儲可變長度的字元串。聲明方法與VARCHAR相同

表3 DATE和BOOLEAN

datatype
range
description

BOOLEAN
TRUE/FALSE
存儲邏輯值TRUE或FALSE,無參數

DATE
01/01/4712 BC
存儲固定長的日期和時間值,日期值中包含時間

3. 怎麼查看一個sql語句是否使用了索引

1、首先打開PL/SQL,並進行登錄。

4. SQL如何顯示查詢結果的前100條

SQL語句顯示查詢結果前100條在不同的資料庫查詢語句不同,分別是:

1、在 sqlserver資料庫中:

SET ROWCOUNT 100 GOSELECT * FROM 表名 ;

2、在Oracle資料庫中:

select*from表名 whererownum<=100;

3、在mysql資料庫中:

select*from表名 limit 0,100,使用idea進行示例如下:

(4)plsql常量擴展閱讀:

如果要查詢指定條數的搜索結果,可以使用limit函數實現,Limit子句可以被用於強制 SELECT 語句返回指定的記錄數。例如使用SQL語句顯示查詢結果的100到300條記錄語句為:

SELECT * FROM tablename LIMIT 100,300 ;

總之,使用limit函數可以輕松對查詢結果進行控制,或者實現分頁功能。

5. sql update 如何更新日期型數據

update [表名]

set [日期型欄位] = null

where [條件欄位] = 判定條件;如果所有該日期型欄位都需要清空,就不加where從句。

更新資料庫里日期類型的數據:

1、如果是更新成當前時間的話:

sql:update tablename set timeNew =sysdate;

2、如果是更新成固定的時間或者是固定格式的時間,可以通過TO_DATE語句實現:

sql:update tablename set timeNew =TO_DATE('2015-12-21', 'YYYY-MM-DD');



(5)plsql常量擴展閱讀:

updateSQL的時間變數:

update temp

set dt=CONVERT(DATETIME,'2015-09-17 '+CONVERT(VARCHAR,dt,114))

--dt為欄位,類型為datetime

CONVERT(VARCHAR,dt,114) 為獲取dt中的時間部分。如「07:50:59.897」

再將其與日期字串連接,之後將整字串轉換為datetime類型更新到表裡。

6. pl-sql中select * from al 這個al是什麼

Dual簡單的說就是一個空表,Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。常用來通過select語句計算常數表達式。

特性:

1、Oracle提供的最小的表,不論進行何種操作(不要刪除記錄),它都只有一條記錄——'X'。

例如:執行select * from al,裡面只有一條記錄;執行insert into al values('Y')後,再次查詢al表,仍然顯示一條記錄。

2、是sys用戶下的一張內部表,所有用戶都可以使用DUAL名稱訪問,無論什麼時候這個表總是存在

例如:執行一個查看當前日期的語句 select sysdate from al,這條語句在放在放在任何一個oracle資料庫當中都不會報錯,所以一般做一些特定查詢的時候用這個表是最穩妥的。

(6)plsql常量擴展閱讀:

用途

1、select計算常量表達式、偽列等值

oracle內部處理使它只返回一行數據,而使用其它表時可能返回多個數據行。

2、查看當前用戶

select user from al;

select count(*) from al;

3、用做計算器

select 7*9*10-10 from al;

4、調用系統函數

(1)獲得當前系統時間

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from al;

(2)獲得主機名

select sys_context('userenv','terminal') from al;

(3)獲得當前locale

select sys_context('userenv','language') from al;

(4)獲得一個隨機數

select DBMS_RANDOM.random from al;

5、查看序列值

(1)創建序列aaa 以1開始,每次加1

create sequence aaa increment by 1 start with 1;

(2)獲得序列aaa 的下一個序列值

select aaa.nextval from al;

(3)獲得序列aaa 的當前序列值

select aaa.currval from al;

7. oracle pl/sql中如何使用變數

定義並使用變數

PL/SQL有四種類型:標量類型,復合類型,引用類型 (reference),LOB(Large Obejct)類型

一、標量類型

最常用的就是標量類型,是指只能存放單個數值的變數,包括數字類型、字元類型、日期類型和布爾類型,每種類型又包含相應的子類型。

常量標量類型如下:

VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG RAW ,BOOLEAN,BINARY_INTEGER(僅 PL / SQL使用),BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)

定義標量:

identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]

使用標量需要注意的是=號被:=取代,與delphi一樣的賦值符號@_@

例子:

v_name VARCHAR2 ( 10 );
v_rate CONSTANTS NUMBER ( 4 , 2 ) : = 3.04 ;

為了防止定義的變數類型與表中的欄位類型不一致,可以使用%TYPE來定義:

v_name employee.name % TYPE;

如上面所示,v_name的類型就與表 employee中的name欄位類型一樣!!

二、復合變數:

用於存放多個值的變數稱為復合變數,包括PL/SQL記錄,PL/SQL表,嵌套表和VARRAY四種類型

1.PL/SQL記錄

類似於C/C++中的結構概念:

declare
TYPE employee_record is RECORD(
id employee.id % TYPE,
name employee.name % TYPE,
email employee.email % TYPE);
em_record employee_record;
begin
select id,name,email into em_record from employee where name =& name;
dbms_output.put_line( ' 雇員名: ' || em_record.name || ' 雇員ID: ' || em_record.id);
end ;

2.PL/SQL表,類似於數組概念,不同的是PL/SQL表允許負值下標,而且沒有上下限,如:

declare
TYPE employee_table is table of employee.name % TYPE index by BINaRY_INTEGER;
em_table employee_table;
begin
select name into em_table( - 1 ) from employee where name =& name;
dbms_output.put_line( ' 雇員名: ' || em_table( - 1 ));
end ;

3.嵌套表,與PL/SQL 表相似,不同的是嵌套表可以做表列的數據類型,而PL/SQL表不能,使用嵌套表作為表列時,必須為其指定專門的存儲表,如:

create or replace TYPE emp_type as OBJECT(name VARCHAR2 ( 10 ),salary NUMBER ( 6 , 2 ),hiredate DATE);

CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type;

CREATE TABLE department(
deptno NUMBER ( 2 ),dname VARCHAR2 ( 10 ),
employee emp_array)NESTED TABLE employee STORE as employee_dept;

4.VARRAY(變長數組),與嵌套表相似,也可以做為表列的數據類型,但是嵌套表沒有個數限制,而VARRAY有個數限制,如:

CREATE TYPE TEST_ARRAY IS VARRAY(20) OF emp_type;

三、引用變數(reference)

類似於C++中的指針或者JAVA中引用的概念,用於存放數值指針的變數,使用此變數,可以使得應用程序共享相同對象,降低佔用空間。此類有兩種類型:游標(REF CURSOR)和對象類型(REF OBJECT)

1.REF CURSOR,定義時同時指定SELECT語句的游標稱為顯式或者靜態游標,在打開時才指定SELECT語句的游標稱為動態游標,如:

DECLARE
TYPE c1 IS REF CURSOR ;
emp_cursor c1;
v_name employee.name % TYPE;
v_sal employee.salary % TYPE;
begin
open emp_cursor for
SELECT name,salary FROM EMPLOYEE ;
LOOP
FETCH emp_cursor INTO v_name,v_sal;
EXIT WHEN emp_cursor % NOTFOUND;
dbms_output.put_line(v_name);
END LOOP;
close emp_cursor;
end ;

2.REF OBJECT,與JAVA的引用概念相同,存儲的是指向對象的指針

四、LOB類型

LOB類型是指用於存儲大批量數據的變數,包括內部的3種(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。
CLOB,NCLOB用於存儲大量的字元數據。
BLOB用於存儲大批量二進制數據(如圖象)。
BFILE則存儲指向OS文件的指針。

8. 通過jdbc執行sql比在plsql中慢好多

大哥,plsql是只檢索出前面的20條,即rownum<20 的數據,JDBC是查全部。你把PLSQL的數據全展開,你看看要多少秒!

9. plsql 中constant 是什麼意思

constant 英[ˈkɒnstənt] 美[ˈkɑ:nstənt]
adj. 不斷的,持續的; 永恆的,始終如一的; 堅定; 忠實的;
n. [數] 常數,常量; 不變的事物; 永恆值;
[例句]She suggests that women are under constant pressure to be abnormally thin.
她暗示說女性總是處在保持身材異常瘦削的壓力之下。
[其他] 復數:constants 形近詞: distant instant constate

熱點內容
現在玩游戲的電腦需要什麼配置 發布:2024-04-20 17:09:57 瀏覽:194
游樂園的密碼一般為多少 發布:2024-04-20 17:09:51 瀏覽:40
興元安卓機怎麼進系統 發布:2024-04-20 17:07:16 瀏覽:805
我的世界伺服器如何放村民 發布:2024-04-20 17:05:35 瀏覽:358
手機反編譯dex 發布:2024-04-20 17:01:01 瀏覽:703
安卓怎麼設置微信拍一拍 發布:2024-04-20 16:44:48 瀏覽:568
三星3熱點密碼怎麼設置 發布:2024-04-20 16:30:52 瀏覽:578
用keil編譯顯示警告warn 發布:2024-04-20 16:27:09 瀏覽:893
訪問在哪兒 發布:2024-04-20 16:20:42 瀏覽:200
安卓手機有什麼可以把聲音改成電音的軟體 發布:2024-04-20 16:19:40 瀏覽:563