【发布时间】:2010-06-26 22:28:28
【问题描述】:
我正在编写一个与 Oracle 一起使用的相当大的 SQL 脚本,但我遇到了一个问题。首先,让我概述一下脚本的运行方式。
- 声明变量
- `客户编号;`
- `服务器ID号;`
- 如果客户不存在则创建客户
- `SELECT ID INTO CUSTOMERID FROM CUSTOMER WHERE NAME = 'The Customer I just Inserted';`
- 如果服务器不存在,则创建服务器,使用 `CUSTOMERID` 值将服务器与客户相关联。
- `SELECT ID INTO SERVERID WHERE HOSTNAME = '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 样式变量,但这些似乎根本不起作用,它们以空值结束,考虑到前面的查询,这不应该发生。
我需要帮助的是了解如何实现这一目标。我对生产环境的访问权限非常有限,所以我所做的任何事情都需要保持基本(例如,没有新的功能、类型或过程)。
【问题讨论】: