我有一个来自海外同事的sql声明,但是当我尝试运行它时会弹出一个显示“输入替换变量”的框。我该放什么?我的同事说他们没有得到同样的盒子。是什么导致这个消息?我提供以下声明。非常感谢任何帮助。
此外,第三行给出了一条消息,说明缺少右括号。
select SUBSTR(created_ts, 1, 7) as created_month,
count(t1.id) as mops_created,
count(completed_ts <> '') as num_complete,
round(AVG(DATEDIFF(planning_complete_ts, created_ts)), 1) as average_created_to_planning_complete,
round(AVG(DATEDIFF(review_complete_ts, planning_complete_ts)), 1) as average_planning_complete_to_review_complete,
round(AVG(DATEDIFF(scheduling_complete_ts, planning_complete_ts)), 1) as average_planning_complete_to_scheduling_complete,
round(AVG(DATEDIFF(scheduled_ts, scheduling_complete_ts)), 1) as average_scheduled_for_x_days_out,
round(AVG(DATEDIFF(completed_ts, planning_complete_ts)), 1) as average_planning_complete_to_mop_complete,
round(AVG(planning_complete_num), 1) as average_num_times_planning_complete,
max(planning_complete_num) as max_planning_complete,
round(AVG(scheduling_complete_num), 1) as average_num_time_scheduled,
max(scheduling_complete_num) as max_scheduled_num
FROM
(select a.id, a.created_ts, a.scheduled_ts, work_start_ts, completed_ts
from TRAFFIC_ENG.DSIS_CC_MASTER as a
WHERE
a.created_ts >= '2013-01-01 00:00:00'
AND
a.status_cc_options_id NOT IN (810, 820)) as t1
LEFT JOIN
(select a.id, max(c.orig_date) as review_complete_ts
from
TRAFFIC_ENG.DSIS_CC_MASTER as a
INNER JOIN
TRAFFIC_ENG.DSIS_CC_LOG_NOTE as c
ON c.cc_master_id = a.id
AND (c.cc_log_note_type_id = 8 OR c.note = 'Passed Review & submitted to Scheduling')
WHERE
a.created_ts >= '2013-01-01 00:00:00'
AND
a.status_cc_options_id NOT IN (810, 820)
GROUP BY a.id) as review_complete
ON review_complete.id = t1.id
LEFT JOIN
(
select a.id, min(c.orig_date) as planning_complete_ts
from
TRAFFIC_ENG.DSIS_CC_MASTER as a
INNER JOIN
TRAFFIC_ENG.DSIS_CC_LOG_NOTE as c
ON c.cc_master_id = a.id
AND (c.cc_log_note_type_id = 5 OR c.note = 'Submitted for Review')
WHERE
a.created_ts >= '2013-01-01 00:00:00'
AND
a.status_cc_options_id NOT IN (810, 820)
GROUP BY a.id
) as planning_complete
ON planning_complete.id = t1.id
LEFT JOIN
(
select a.id, (c.orig_date) as scheduling_complete_ts
from
TRAFFIC_ENG.DSIS_CC_MASTER as a
INNER JOIN
TRAFFIC_ENG.DSIS_CC_LOG_NOTE as c
ON c.cc_master_id = a.id
AND (c.cc_log_note_type_id = 7 OR c.note='Scheduled')
WHERE
a.created_ts >= '2013-01-01 00:00:00'
AND
a.status_cc_options_id NOT IN (810, 820)
GROUP BY a.id
) as scheduling_complete
ON scheduling_complete.id = t1.id
LEFT JOIN
(
select a.id, count(c.orig_date) as planning_complete_num
from
TRAFFIC_ENG.DSIS_CC_MASTER as a
INNER JOIN
TRAFFIC_ENG.DSIS_CC_LOG_NOTE as c
ON c.cc_master_id = a.id
AND (c.cc_log_note_type_id = 5 OR c.note = 'Submitted for Review')
WHERE
a.created_ts >= '2013-01-01 00:00:00'
AND
a.status_cc_options_id NOT IN (810, 820)
GROUP BY a.id
) as planning_complete_num
ON planning_complete_num.id = t1.id
LEFT JOIN
(
select a.id, count(c.orig_date) as scheduling_complete_num
from
TRAFFIC_ENG.DSIS_CC_MASTER as a
INNER JOIN
TRAFFIC_ENG.DSIS_CC_LOG_NOTE as c
ON c.cc_master_id = a.id
AND (c.cc_log_note_type_id = 7 OR c.note='Scheduled')
WHERE
a.created_ts >= '2013-01-01 00:00:00'
AND
a.status_cc_options_id NOT IN (810, 820)
GROUP BY a.id
) as scheduling_complete_num
ON scheduling_complete_num.id = t1.id
GROUP BY created_month
答案 0 :(得分:2)
你可以试试“SET DEFINE OFF”吗?
SQL> SET SERVEROUTPUT ON
SQL> SET DEFINE OFF
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('A&B');
3 END;
4 /
A&B
PL/SQL procedure successfully completed.
答案 1 :(得分:2)
正如@the_slk所说,您可以使用substitution variables关闭set define off
。这将阻止客户端将字符串&
中的'Passed Review & submitted to Scheduling'
解释为用户输入。听起来您可能正在使用SQL Developer,但许多SQL * Plus文档仍然相关。如果您正在使用其他客户端,则可能会优先关闭它。
问题的第二部分,关于“缺少右括号”,看起来可能是因为你的代码中有空行。我认为你的客户端正在处理代码的每个部分,用空行分隔,作为单独的语句 - 我按照格式化的方式制作了四个,但我不确定是否与错误完全一致。 SQL * Plus默认情况下会这样做。无论如何,只有最后一个块实际上正在被执行,但是如果它真的只是运行'GROUP BY created_month'
你会得到一个不同的错误,所以无论你的客户是什么,它似乎表现得有点不同,或者你有更多之后的代码,你没有显示。
要使SQL * Plus忽略空行,并将由空白行分隔的代码视为一个块set sqlblanklines on
。虽然SQL Developer不使用该设置,但仍允许您使用空行,因此您的客户端可能是其他内容,并且将使用相同的命令或具有自己的首选项。如果您使用的是与同事相同的客户端,请询问他们如何设置自己的偏好设置。如果您的客户端没有明显的方法来更改行为,那么从脚本中删除空行可能会解决此问题。
答案 2 :(得分:1)
存在&amp; '通过评论&amp;中的符号提交给Scheduling',它通常向sql工具表明你要替换该位置的变量。
如果您使用像Toad这样的图形工具,可以在View / Options / Prompt for Substitution Variables中关闭它。