2012-07-02 35 views
5

Trong SQL Server, tôi có thể định nghĩa các biến cục bộ như thế này.Cách đơn giản nhất để xác định biến cục bộ trong Oracle là gì?

declare @id number := 1000 

select * from tbl_A where id = @id; 
select * from tbl_B where id = @id; 

Rất thuận tiện. Tôi đã cố gắng làm điều tương tự trong PL/SQL nhưng nó không hoạt động.

DECLARE id number; 
select 1000 into id from dual; 

Bạn có biết cách làm tương tự không? Phương pháp đơn giản nhất là mục tiêu của tôi.

Trả lời

9

Nếu bạn muốn xác định một biến địa phương trong PL/SQL, bạn cần một khối PL/SQL hoàn chỉnh

DECLARE 
    id NUMBER; 
BEGIN 
    SELECT 1000 
    INTO id 
    FROM dual; 
END; 

hoặc chỉ

DECLARE 
    id NUMBER := 1000; 
BEGIN 
    <<do something that uses the local variable>> 
END; 

Nếu bạn muốn khai báo một biến trong SQL * Plus

SQL> variable id number 
SQL> begin 
     select 1000 into :id from dual; 
    end; 
    /

SQL> print id 

     ID 
---------- 
     1000 

SQL> SELECT * FROM tbl_a WHERE id = :id 
0

Tôi đã thử trên Oracle và nó đã hoạt động:

> DEF x = TOTO 
> SELECT '&x' FROM dual; 

Kết quả sẽ là: TOTO

0

cú pháp chung để khai báo biến trong PL/SQL là

var_nm datatype [NOT NULL: = var_value];

  • var_nn là tên của biến.
  • kiểu dữ liệu là kiểu dữ liệu PL/SQL hợp lệ.
  • NOT NULL là một đặc tả tùy chọn trên biến mà biến này không thể gán giá trị null.
  • giá trị var_value hoặc DEFAULT cũng là thông số tùy chọn, nơi bạn có thể khởi tạo biến có một số giá trị cụ thể.
  • Mỗi khai báo biến là một tuyên bố riêng biệt và phải được chấm dứt bằng dấu chấm phẩy.

Chúng ta có thể gán giá trị cho các biến trong một trong hai cách sau - (. Ví dụ var_nm:= var_value;)

phân
  1. trực tiếp
  2. Sử dụng select from
(Ví dụ SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];.)

Trong trường hợp của bạn như Justin Cave đã đề cập, nó có thể là

DECLARE 
id number; 
BEGIN 
SELECT 1000 into id from dual; 
dbms_output.put_line('id : '|| id); 
END; 
/

HOẶC

DECLARE 
id number := 1000; 
BEGIN 
dbms_output.put_line('id : '|| id); 
END; 
/

LƯU Ý: '/' tức là lại giảm sau khi từ khóa END chỉ để thực hiện trên PL/SQL Block.

0

Một thay thế cho DECLARE Khối là sử dụng một VỚI khoản:

WITH my_params AS (
    SELECT 123 AS min_id FROM DUAL 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 

Đó là hơn xách tay như nhiều nhà cung cấp hỗ trợ cho mệnh đề WITH và bạn có thể thay đổi liền mạch từ tham số giá trị động. Ví dụ:

WITH my_params AS (
    SELECT min(id) AS min_id FROM some_id_table 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 
Các vấn đề liên quan