Làm cách nào để khai báo và sử dụng các biến trong Oracle?


18

Các kỹ năng chính của tôi là với SQL Server, nhưng tôi đã được yêu cầu điều chỉnh một truy vấn của Oracle. Tôi đã viết SQL sau đây:

declare @startDate int
select @startDate = 20110501

Và tôi nhận được lỗi này:

declare @startDate int
select @startDate = 20110501
Error at line 1
ORA-06550: line 1, column 9:
PLS-00103: Encountered the symbol "@" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor

Làm cách nào để khai báo và sử dụng các biến trong Oracle?

Câu trả lời:


18

Bên trong khối pl / sql:

declare
 startdate number;
begin
  select 20110501 into startdate from dual;
end;
/

sử dụng biến liên kết:

var startdate number;
begin
  select 20110501 into :startdate from dual;
end;
/

Thủ tục PL / SQL đã hoàn thành thành công.

SQL> print startdate

 STARTDATE
----------
  20110501

trong một truy vấn:

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */

Thật không may, điều này không làm việc cho tôi. var my_num SỐ; BEGIN CHỌN 12345 VÀO my_num TỪ kép; KẾT THÚC; / select * từ my_table sa trong đó sa.my_col =: my_num;
Matthew

lỗi gì bạn nhận được? (vừa được thử nghiệm và hoạt động)
ik_zelf 16/11/18

Tôi thực sự đã thử giải pháp được đăng bởi Jon of All Trades và nó hoạt động hoàn hảo cho nhu cầu của tôi - tức là sử dụng DEFINE và tham chiếu biến với &.
Matthew

3

SQL * Plus hỗ trợ một định dạng bổ sung:

DEFINE StartDate = TO_DATE('2016-06-21');
DEFINE EndDate   = TO_DATE('2016-06-30');

SELECT
    *
FROM
    MyTable
WHERE
    DateField BETWEEN &StartDate and &EndDate;

Lưu ý các ký hiệu trong đó các thay thế sẽ được thực hiện trong truy vấn.


Điều này làm việc cho tôi trong Toad cho Oracle khi sử dụng bất kỳ của các chức năng: Execute as scripthoặc Execute via Toad script runnerhoặc Execute via SQL*Plus. Tuy nhiên, nếu bạn thử chạy với Execute/compile statement at caretnó sẽ trả về một thông báo lỗi: "ORA-009000: câu lệnh SQL không hợp lệ".
SherlockS Lansheet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.