我有我维护的应用程序的源代码.在我的web.config文件中,我有我的测试和生产数据库的连接字符串,如下所示:
<add name="conn" connectionString="Data Source=TestDBServer; (etc...)">
<add name="conn" connectionString="Data Source=ProdDBServer; (etc...)">
Run Code Online (Sandbox Code Playgroud)
每当我进行测试时,我只会注释掉生产连接字符串,反之亦然.例如,当我完成测试时,我会注释掉测试连接字符串并取消注释生产连接字符串然后进行部署.
我作为开发人员的职业生涯很早,但在我看来,必须有更好或更标准的方法来处理这个问题.我该怎么办?
Guilherme Lofrano Corneto联系了一个完全回答我自己问题的相同问题.我已经将我的标记重复了.链接在这里:
我从这样的查询开始:
SELECT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
WHERE A.ID IN (SELECT ID FROM TABLE_B)
Run Code Online (Sandbox Code Playgroud)
上面的查询给了我重复的记录,所以我这样添加了DISTINCT关键字:
SELECT DISTINCT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
WHERE A.ID IN (SELECT ID FROM TABLE_B)
Run Code Online (Sandbox Code Playgroud)
第二个查询给了我以下错误:
ORA-00932:数据类型不一致:预期-获得CLOB
- 00000-“数据类型不一致:预期%s得到了%s”
我最终通过将WHERE子句中的条件移动到INNER JOIN这样来更正查询并消除了重复记录:
SELECT A.*
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.YEAR = B.YEAR
AND A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)
我只是不明白为什么第二个查询不起作用。为什么在DISTINCT此处添加关键字会突然导致问题?
这是一些更简化的伪代码,描述了我正在尝试做的事情:
DECLARE
CURSOR CURSOR_A IS
SELECT FIELD_A1, FIELD_A2
FROM TABLE_A;
vNAME NVARCHAR2(100) := NULL;
BEGIN
FOR RECORD_A IN CURSOR_A LOOP
IF (RECORD_A.FIELD_A1 IS NOT NULL) THEN
vNAME := RECORD_A.FIELD_A1;
ELSE
vNAME := (SELECT FIELD_B
FROM TABLE_B
WHERE TABLE_B.B2 = RECORD_A.A2)
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)
不允许在 PL/SQL 块中包含 SELECT 语句吗?