Poniżej znajduje się przykład użycia zmiennych w SQL Server 2000.
DECLARE @EmpIDVar INT
SET @EmpIDVar = 1234
SELECT *
FROM Employees
WHERE EmployeeID = @EmpIDVar
Chcę zrobić dokładnie to samo w Oracle, używając SQL Developer bez dodatkowej złożoności. Wydaje się, że jest to bardzo prosta rzecz, ale nie mogę znaleźć prostego rozwiązania. Jak mogę to zrobić?
Odpowiedzi:
Używam SQL-Developer w wersji 3.2. Inne rzeczy nie działały dla mnie, ale to:
Jest to również najbardziej zręczny sposób zaprezentowany tutaj.
(Jeśli pominiesz część „zdefiniuj”, zostanie wyświetlony monit o podanie tej wartości)
źródło
Istnieją dwa typy zmiennych w SQL-plus: podstawianie i wiązanie.
To jest podstawienie (zmienne podstawienia mogą zastąpić opcje polecenia SQL * Plus lub inny tekst zakodowany na stałe):
To jest bind (zmienne wiązania przechowują wartości danych dla instrukcji SQL i PL / SQL wykonywanych w RDBMS; mogą zawierać pojedyncze wartości lub pełne zestawy wyników):
SQL Developer obsługuje zmienne podstawienia, ale gdy wykonujesz zapytanie z bind
:var
składnią się monit o powiązanie (w oknie dialogowym).Odniesienie:
Zmienne podstawiania UPDATE są nieco trudne w użyciu, spójrz:
źródło
var x
iexec :x
, bez zachęty.W SQL * Plus możesz zrobić coś bardzo podobnego
W SQL Developer, jeśli uruchomisz instrukcję, która ma dowolną liczbę zmiennych wiążących (poprzedzonych dwukropkiem), zostaniesz poproszony o wprowadzenie wartości. Jak wskazuje Alex, możesz również zrobić coś podobnego za pomocą funkcji „Uruchom skrypt” (F5) z alternatywną składnią EXEC, którą sugeruje Alex.
źródło
select...into
(ORA-01006), więcexec :v_emp_id := 1234;
zamiast tego musisz to zrobić .Ok, wiem, że to trochę hack, ale jest to sposób na użycie zmiennej w prostym zapytaniu, a nie skrypcie:
Możesz go uruchomić wszędzie.
źródło
Prosta odpowiedź NIE.
Jednak możesz osiągnąć coś podobnego, uruchamiając następującą wersję przy użyciu zmiennych powiązań:
Po uruchomieniu powyższego zapytania w SQL Developer zostaniesz poproszony o wprowadzenie wartości zmiennej powiązanej EmployeeID.
źródło
Możesz przeczytać gdzie indziej o zmiennych podstawianych; są całkiem przydatne w SQL Developer. Ale mam pasowania, próbując użyć zmiennych wiążących w SQL Developer. Tym się właśnie zajmuję:
SET SERVEROUTPUT ON
sprawia, że tekst może być wydrukowany na konsoli wyjścia skryptu.Uważam, że to, co tutaj robimy, oficjalnie nazywa się PL / SQL. Opuściliśmy czystą krainę SQL i używamy innego silnika w Oracle. Widzisz
SELECT
powyższe? W PL / SQL zawsze musisz miećSELECT ... INTO
zmienną lub refcursor. Nie możesz po prostuSELECT
zwrócić wyniku w PL / SQL.źródło
Myślę, że najłatwiejszym sposobem w Twoim przypadku jest:
Dla wartości łańcuchowych będzie to wyglądać następująco:
źródło
Użyj następnego zapytania:
źródło
Spróbuj, to zadziała, lepiej utwórz procedurę, jeśli procedura nie jest możliwa, możesz użyć tego skryptu.
źródło
W programistach sql definiuj właściwości domyślnie „ON”. Jeśli tak czy inaczej, wykonaj poniższe czynności.
set define on; define batchNo='123'; update TABLE_NAME SET IND1 = 'Y', IND2 = 'Y' WHERE BATCH_NO = '&batchNo';
źródło