Oracle-Sql-Developer
SQL Developer:如何編寫腳本輸出到查詢結果網格
我習慣了 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);