Oracle-Sql-Developer

SQL Developer:如何編寫腳本輸出到查詢結果網格

  • September 26, 2016

我習慣了 MS SQL Server Studio,我可以在其中 DECLARE 和 SET 變數並在我的查詢中使用它們,然後在數據網格中顯示結果,我可以將其複制並粘貼到 Excel 中。

在 Oracle SQL Developer 中,我可以獲得在“查詢結果”網格中返回的簡單查詢結果,但如果我需要編寫更複雜的腳本(使用變數),我需要使用“執行腳本”選項,我的結果將輸出到“腳本輸出”視窗,在該視窗中選擇要復製到 Excel 中的結果要困難得多。

這是範常式式碼,其中變數 :v_yr 被使用了 3 次:

var v_yr number;
exec :v_yr := 2014;

select job.employee_no,
mas.last_name,
mas.first_name,
pay.contract_salary,
pay.contract_days_actual,
CASE job.contract_year WHEN :v_yr THEN cal.contract_days_actual END,
pay.full_year_salary,
pay.full_year_contract_days,
CASE job.contract_year WHEN :v_yr THEN sal.annual_rate END
from hrs.employee_jobs job
LEFT OUTER Join hrs.employee_master mas on job.employee_no = mas.employee_no
LEFT OUTER JOIN hrs.employee_pays pay on job.employee_no = pay.employee_no AND
   job.job_seq_no = pay.job_seq_no
LEFT OUTER JOIN hrs.schedule_amounts sal on pay.schedule_id = sal.schedule_id AND
   pay.schedule_no = sal.schedule_no AND
   pay.schedule_level = sal.schedule_level AND
   pay.schedule_step = sal.schedule_step
LEFT OUTER JOIN hrs.calendar_master cal on pay.calendar = cal.calendar
where job.contract_year in (2013,:v_yr);

到目前為止,在我的Google搜尋中,似乎為了在網格中顯示這些結果,我需要將此查詢設置為某種儲存過程,將結果分配給游標。我對 Oracle 程式的了解還不夠,無法理解這個答案

如果您刪除前兩行(var … 和 exec),您可以在 sql_developer 中執行它並在網格中獲取結果。

現在,如果您必須有變數聲明,您可以將“job.contract_year in (2013,:v_yr)”中的 : 替換為 &,這樣它會提示您在執行時輸入一個值。

如果必須將其轉換為過程,則需要走 ref_cursor 路線。

您可能會發現以下討論很有趣:如何聲明一個變數並在同一個 SQL 腳本中使用它?

 ACCEPT v_yr PROMPT "Please enter year: " default 2013

 SELECT job.employee_no,
 mas.last_name,
 mas.first_name,
 pay.contract_salary,
 pay.contract_days_actual,
 CASE job.contract_year
   WHEN &&v_yr
   THEN cal.contract_days_actual
 END,
 pay.full_year_salary,
 pay.full_year_contract_days,
 CASE job.contract_year
   WHEN &&v_yr
   THEN sal.annual_rate
 END
FROM hrs.employee_jobs job
LEFT OUTER JOIN hrs.employee_master mas
ON job.employee_no = mas.employee_no
LEFT OUTER JOIN hrs.employee_pays pay
ON job.employee_no = pay.employee_no
AND job.job_seq_no = pay.job_seq_no
LEFT OUTER JOIN hrs.schedule_amounts sal
ON pay.schedule_id     = sal.schedule_id
AND pay.schedule_no    = sal.schedule_no
AND pay.schedule_level = sal.schedule_level
AND pay.schedule_step  = sal.schedule_step
LEFT OUTER JOIN hrs.calendar_master cal
ON pay.calendar          = cal.calendar
WHERE job.contract_year IN (2013,&&v_yr);

引用自:https://dba.stackexchange.com/questions/44491