Я работаю над довольно большим сценарием SQL, который будет использоваться с Oracle, но у меня возникла проблема. Сначала позвольте мне рассказать, как работает скрипт.
- Объявление переменных
- `CUSTOMERID NUMBER;`
- `SERVERID NUMBER;`
- Создать клиента, если он не существует
- `ВЫБЕРИТЕ ID В CUSTOMERID ОТ КЛИЕНТА, ГДЕ ИМЯ = 'Клиент, которого я только что вставил';`
- Создайте сервер, если он не существует, используя значение `CUSTOMERID`, чтобы связать сервер с клиентом.
- `ВЫБРАТЬ ИД В СЕРВЕРИДЕ, ГДЕ ХОЗЯЙКА = 'the.server.i.just.created';`
- Для каждой службы, принадлежащей этому серверу, вставьте службу, используя значение `SERVERID`, чтобы связать службу с сервером.
- Перейти к 2
Теперь этот процесс работает хорошо только для одного клиента с 15 серверами, каждый из которых имеет 6 сервисов. Но как только появляется следующий клиент, я получаю подсказки для замены переменных. То, как я использую переменные в моей вставке, довольно просто:
INSERT INTO SERVERS(CUSTOMER_ID, HOSTNAME)
SELECT CUSTOMERID, 'the.server.i.just.created' FROM DUAL
WHERE NOT EXISTS (
SELECT *
FROM SERVERS
WHERE HOSTNAME = 'the.server.i.just.created'
);
Я также пытался использовать метод DECLARE ... BEGIN ... END;
, но я получаю те же общие результаты. Некоторые примеры, которые я видел, предлагают использовать переменные стиля :CUSTOMERID
, но они, похоже, не работают вообще, где они заканчиваются нулевыми значениями, что не должно происходить с учетом предыдущих запросов.
Мне нужна помощь в понимании того, как этого достичь. У меня очень ограниченный доступ к производственной среде, поэтому все, что я делаю, должно быть базовым (например, никаких новых функций, типов или процедур).