Oracle入門(十四 6)之使用標量資料型別

2021-08-20 09:30:06 字數 2803 閱讀 7956

字元資料型別包括char,varchar2和long。

declare

v_emp_job varchar2(9);

v_order_no varchar2(6);

v_product_id varchar2(10);

v_rpt_body_part long;

數字資料型別包括number,pls_integer,binary_integer和binary_float。 在語法中,constant約束變數,使其值不能改變。 常量必須初始化。 integer是number(38,0)的別名。

declare

v_dept_total_sal number(9,2) := 0;

v_count_loop integer := 0;

c_tax_rate constant number(3,2) := 8.25;

日期資料型別包括date,timestamp和timestamp with timezone。

declare

v_orderdate date := sysdate + 7;

v_natl_holiday date;

v_web_sign_on_date timestamp;

布林值是儲存用於邏輯計算的三個可能值之一的資料型別:true,false或null。

declare

v_valid boolean not null := true;

v_is_found boolean := false;

v_underage boolean;

宣告布林變數細節

宣告布林變數時:

•只能將值true,false和null分配給布林變數。

•條件表示式使用邏輯運算子and和or,而運算子不檢查變數值。

•變數總是產生true,false或null。

•您可以使用算術,字元和日期表示式來返回布林值。

只有值true,false和null可以分配給布林變數。

•使用有意義的名稱並遵循命名約定。

•當變數必須儲存乙個值時,使用not null約束。

•避免使用列名作為識別符號。

declare

country_id char(2);

begin

select country_id

into country_id

from countries

where country_name = 'canada';

end;

您可以使用%type屬性根據另乙個先前宣告的變數或資料庫列宣告變數,而不是對變數的資料型別和精度進行硬編碼。

當儲存在變數中的值是從資料庫中的表派生時,最常使用%type屬性。

當你使用%type屬性宣告乙個變數時,你應該用資料庫表和列名作為字首。

看看這個資料庫表和使用它的pl / sql塊。 這個pl / sql塊將正確的薪水儲存在v_emp_salary變數中。 但是如果**列稍後改變呢?

create table myemps (

emp_name varchar2(6),

emp_salary number(6,2));

declare

v_emp_salary number(6,2);

begin

select emp_salary into v_emp_salary

from myemps where emp_name = 'smith';

end;

%type屬性:

•用於自動給變數賦予與以下相同的資料型別和大小:

- 資料庫列定義

- 另乙個宣告的變數

•帶有以下任一項的字首:

- 資料庫表和列

- 其他宣告變數的名稱句法:

identifier table.column_name%type;
例子:

...

v_emp_lname employees.last_name%type;

v_balance number(7,2);

v_min_balance v_balance%type := 1000;

...

%type屬性的優點是:

•您可以避免由資料型別不匹配或錯誤精度造成的錯誤。

•如果列定義更改,則不需要更改變數宣告。 也就是說,如果您已經為特定的**宣告了一些變數而不使用%type屬性,那麼如果宣告變數的列被更改,那麼pl / sql塊可以返回錯誤。

•當您使用%type屬性時,pl / sql將在編譯塊時確定變數的資料型別和大小。 這確保了這樣的變數總是與用於填充它的列相容。

再看看資料庫表和pl / sql塊。現在,即使列資料型別稍後發生更改,pl / sql塊仍會繼續正常工作。

create table myemps (

emp_name varchar2(6),

emp_salary number(6,2));

declare

v_emp_salary myemps.emp_salary%type;

begin

select emp_salary into v_emp_salary

from myemps where emp_name = 'smith';

end;

Oracle入門(十四 18)之使用動態SQL

資料庫中的所有sql語句都經歷了不同的階段 解析 預執行 這可能嗎?檢查包括語法,物件存在,許可權等 繫結 獲取語句中引用的任何變數的實際值 執行 語句被執行。提取 結果返回給使用者。某些階段可能與所有語句無關 例如,提取階段適用於查詢,但不適用於dml。當pl sql子程式中包含sql語句時,解析...

Oracle入門(十四B)之PL SQL異常處理

定義 程式執行過程的警告或錯誤成為例外 exception 其他標準的oracle錯誤,可以自定義異常名,將其與指定oracle錯誤關聯,由系統觸發。例子 在pl sql定義部分宣告 some bad error exception pragma exception init some bad er...

Oracle入門(十四H)之良好的程式設計實踐

一 為什麼要學習它 好的程式設計實踐是技巧,可以按照建立最好的 可能。程式設計實踐涵蓋了一切從 更多可以用更快的速度建立 效能。軟體工程團隊通常會遵循風格指導讓團隊中的每個人使用相同的技術。這使它更容易閱讀和修改編寫的 其他。已經學會了幾種好的程式設計習慣 這個課程 轉化 不要依賴隱式資料型別轉換,...