ฉันจะประกาศและใช้ตัวแปรใน Oracle ได้อย่างไร


18

ทักษะหลักของฉันอยู่กับ SQL Server แต่ฉันถูกขอให้ทำการปรับแต่งแบบสอบถามของ Oracle ฉันได้เขียน SQL ต่อไปนี้:

declare @startDate int
select @startDate = 20110501

และฉันได้รับข้อผิดพลาดนี้:

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

ฉันจะประกาศและใช้ตัวแปรใน Oracle ได้อย่างไร

คำตอบ:


18

ภายในบล็อก pl / sql:

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

ใช้ตัวแปรผูก:

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

ขั้นตอน PL / SQL เสร็จสมบูรณ์

SQL> print startdate

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

ในแบบสอบถาม:

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

น่าเสียดายที่นี่ไม่ได้ผลสำหรับฉัน var my_num NUMBER; เริ่มต้นเลือก 12345 ลงใน my_num จากคู่; END; / select * จาก my_table sa โดยที่ sa.my_col =: my_num;
Matthew

คุณได้รับข้อผิดพลาดอะไร (เพิ่งผ่านการทดสอบและใช้งาน)
ik_zelf

ฉันลองใช้วิธีแก้ปัญหาที่โพสต์โดย Jon of All Trades และทำงานได้อย่างสมบูรณ์แบบสำหรับความต้องการของฉัน - เช่นใช้ DEFINE และอ้างอิงตัวแปรด้วย &
Matthew

3

SQL * Plus รองรับรูปแบบเพิ่มเติม:

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

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

หมายเหตุเครื่องหมายแอมเปอร์แซนด์ที่จะทำการแทนที่ภายในแบบสอบถาม


นี้ทำงานสำหรับฉันในคางคกสำหรับ Oracle เมื่อใช้ใด ๆ ของฟังก์ชั่นเหล่านี้: Execute as scriptหรือหรือExecute via Toad script runner Execute via SQL*Plusอย่างไรก็ตามหากคุณลองใช้งานด้วยExecute/compile statement at caretข้อความจะแสดงข้อความแสดงข้อผิดพลาด: "ORA-009000: คำสั่ง SQL ที่ไม่ถูกต้อง"
SherlockSpreadsheets
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.