2009-12-22 32 views
6

Tôi có một tập lệnh SQL đang được thực thi trong TOAD. Hiện tại tôi đã đưa ra tuyên bố sau tuyên bố, như vậy:biến trong kịch bản TOAD

select such-and-such from somewhere; 

delete other-thing from somewhere-else; 

Và cứ tiếp tục như vậy. Một số mệnh đề ở đâu kết thúc lặp lại vì tôi có các truy vấn phức tạp bên trong để nhận các ID cụ thể để hoạt động. Tôi muốn nắm bắt ID trong phần đầu của tập lệnh trong một biến, và sau đó sử dụng biến đó trong các mệnh đề tiếp theo. Vì vậy, một cái gì đó như thế này:

variable MY_ID = select the-ID from somewhere; 

select such-and-such from somewhere where ID = @MY_ID; 

Rõ ràng là tôi đang tạo cú pháp đó nhưng đó là chức năng tôi đang tìm kiếm. Nhưng tôi không chắc liệu điều đó có thể xảy ra trong một kịch bản TOAD hay không. Tôi biết tôi có thể chuyển đổi toàn bộ điều đến một khối PL/SQL nhưng tôi đang cố gắng tránh phải làm điều đó vì nhiều lý do.

Bất kỳ cách nào để thực hiện việc này bằng TOAD mà không chuyển đổi sang khối PL/SQL?

Cảm ơn,

~ Justin

+0

Tôi không thể đưa ra câu trả lời vì tôi không quen với TOAD, nhưng lý do bạn không sử dụng PLSQL là gì? –

+0

Có một số lý do để không chuyển sang PL/SQL. Một là 90% đã hoàn thành và tôi không muốn đầu tư thời gian để chuyển đổi. Hai là các kịch bản PL/SQL khó gỡ lỗi hơn từ kinh nghiệm của tôi và cũng khó hơn để "từng bước" một câu lệnh tại một thời điểm. Điều này có thể là một thiếu kiến ​​thức về phía tôi vì tôi không có chuyên gia PL/SQL. Thứ ba, tôi bàn giao kịch bản này cho người khác và một lần nữa từ kinh nghiệm của tôi "đơn giản" SQL script dễ dàng hơn để đối phó với hơn PL/SQL. – RationalGeek

Trả lời

9

Tôi nghĩ rằng điều này sẽ thực hiện những gì bạn muốn. Bạn có thể khai báo một biến liên kết, chèn một giá trị vào nó, và sau đó sử dụng nó trong các câu lệnh trong tương lai.

variable l_var varchar2(1); 

begin 
    select dummy 
    into :l_var 
    from dual; 
end; 

select * 
    from dual 
where dummy = :l_var; 
0

tôi không còn tích cực sử dụng cóc, nhưng không nên có một số cơ chế để thiết lập giá trị cho ràng buộc thông số tức là select such-and-such from somewhere where ID = :myid; như vậy mà mỗi khi nó xảy ra cóc cung cấp giá trị tương tự cho rằng tham số.

Hoặc, bạn có thể tạo giá trị ngữ cảnh phiên hoặc biến gói PL/SQL (lưu ý: không giống như viết lại toàn bộ mã của bạn để sử dụng PL/SQL). Xem this question

+0

Tôi biết những gì bạn đang đề cập đến với các biến liên kết. Tuy nhiên, tôi muốn nắm bắt giá trị của một câu lệnh chọn khác. Biến này có khả năng là một giá trị khác mỗi khi tôi chạy tập lệnh. – RationalGeek

+0

Vì vậy, chỉ cần đặt nó khác nhau ở đầu mỗi khi bạn chạy nó.Nếu bạn đi tuyến đường gói (lấy ví dụ của Thomas Jones-Low) thì hãy đưa ra tuyên bố đầu tiên của bạn bắt đầu foo.myVar: = 'bất kỳ điều gì tôi muốn lần này'; kết thúc; – Dan

0

Tính năng "Trường được tính toán" trong TOAD thực sự khá mạnh nếu được sử dụng đúng cách. Nó không có gì hơn một trình soạn thảo tập lệnh "mã thông báo" mà tự gắn nó với chính Truy vấn. Nó chỉ có sẵn thông qua Trình soạn thảo thiết kế truy vấn chứ không phải từ Trình soạn thảo gốc, cho phép bạn viết SQL thẳng lên. Như một gợi ý, lần sau bạn tạo một truy vấn được thiết kế trong TOAD và cần tạo phức tạp WHERE hoặc truy vấn phụ, hãy thử tính năng "Trường được tính toán" và sử dụng tùy chọn FORMS về cơ bản đính kèm các điều kiện của bạn vào một cột nhất định hoặc truy vấn. Bạn sẽ ngạc nhiên về mức độ mạnh mẽ của nó. Và nó giúp giữ cho truy vấn SQL của bạn trong một định dạng dễ đọc.

1

Tôi sử dụng biến thay thế SQL * PLUS. Chúng được hỗ trợ bởi TOAD. Bạn có thể thực thi mã này bằng cách nhấn F5.

COLUMN VAR NEW_VALUE VAR_VALUE 

SELECT 'SOMETHING' VAR FROM DUAL; --this sets 'VAR_VALUE' = 'SOMETHING' 

SELECT '&VAR_VALUE' FROM DUAL; --this uses the value set by the previous stmt. 
+0

Như đã viết, đây cũng là một câu trả lời hay: bạn thậm chí có thể có nhiều biến và toàn bộ điều có thể được chạy dưới dạng tập lệnh trong Toad. Câu lệnh cuối cùng trong câu trả lời ở trên có thể được thực hiện bởi chính nó như là một truy vấn đơn lẻ, và Toad sẽ nhắc bạn cho mỗi biến '&' -type; tuy nhiên, ngay cả khi tất cả các biến của bạn có cùng tên, Toad sẽ nhắc bạn cho từng biến. –

Các vấn đề liên quan