使用plpgsql过程提取一条记录(如果存在),然后提取一条记录(对它进行处理)。
变量是行类型:
my_var my_table%rowtype;
我用一条SQL语句填充它:
select * from my_table where owner_id = 6 into my_var;
我知道肯定有这样的行:
raise notice 'my_var is %', my_var;
返回值:
NOTICE: my_var is (383,6,10)
但是,现在我想测试一下,如果条件失败,它是否同时具有这些记录和记录:
if my_var is null then
raise notice 'IT IS NULL';
end if;
if my_var is not null then
raise notice 'IT IS NOT NULL';
end if;
这些加薪都没有出现在我的消息日志中-它从未进入过障碍。测试您是否收到来自a的行的正确方法是SELECT * INTO
什么?
我看到两个可能的原因,为什么…
这些加薪都没有出现在我的消息日志中
首先,NOTICE
通常不会使用默认设置将a写入数据库日志。我在这里引用手册:
log_min_messages
(enum
)控制将哪些消息级别写入服务器日志。有效值为
DEBUG5
,DEBUG4
,DEBUG3
,DEBUG2
,DEBUG1
,INFO
,NOTICE
,WARNING
,ERROR
,LOG
,FATAL
,和PANIC
。(…)
默认值为 WARNING 。请注意,LOG
此处的排名与中的排名不同client_min_messages
。
大胆强调我的。还请注意(手册中的上一项NOTICE
)不同的默认值(client_min_messages
)。
其次,考虑如何对行表达式求值。当(且仅当) 每个元素 均为时,测试才row_variable IS NULL
返回。给出以下示例:TRUE
__NULL
SELECT (1, NULL) IS NULL AS a -- FALSE
,(1, NULL) IS NOT NULL AS b -- also FALSE
这两个 表达式都返回FALSE
。换句话说,行(或记录)变量(1, NULL)
既不是NULL
也不是NOT NULL
。因此,您的两个测试均失败。
-> SQLfiddle, 有更多详细信息。
您甚至可以使用NULL(rec := NULL
)分配记录变量,如果该类型是众所周知的行类型,则结果将使每个元素都为NULL。否则,我们将处理一个匿名记录,并且该结构是未定义的,因此您将无法访问任何元素。但是rowtype
在您的示例中并非如此(始终是众所周知的)。
FOUND
测试您是否收到来自a的行的正确方法是
SELECT * INTO
什么?
您必须考虑到该行即使已分配也可能为NULL。该查询很可能已经返回了一堆NULL值(如果查询中的表定义允许NULL值)。这样的测试在设计上将是不可靠的。
有一种简单而安全的方法。使用GET DIAGNOSTICS ...
或(如果适用)特殊变量FOUND
:
SELECT * FROM my_table WHERE owner_id = 6 INTO my_var;
IF NOT FOUND THEN
RAISE NOTICE 'Query did not return a row!';
END IF;
手册中的详细信息。
我得到了这个转义的JSON 我需要使用Jackson将其转换为Java对象。 然后我创建了一个方法来转换它 Data类中设置为public的变量,那么调用getter时,我将获得。Data类中设置为private的变量,那么调用getter时将得到。 getter和setter总是公共的。
首先,我知道这个查询有点混乱,但它可以正常工作,直到至少有一条记录存在,并且设置为true,此时没有返回任何记录。如果有另一条记录的设置为false或两者的组合,则它可以正常工作,即返回的记录的所有票证总数都设置为0或适当的值。 我已将查询更新为,并将票证表联接更改为left(也尝试了full outer),但它仍然存在上述问题。 为什么会发生这种情况,我能做些什么来防止它?
问题内容: 该表包含有关提供服务的部门的详细信息。该表包含由客户完成的针对特定服务的所有交易。在该条款中,应满足两个自助餐厅。我想得到一个报告,该报告显示给定期间内所有与交易有关的部门。我用过a,因为我想得到所有部门。SQL可以正常运行,并得到我想要的结果,除了, 如果在特定时期内没有针对特定服务的交易,则也将忽略该部门。我想做的是在结果集和COUNT(*)列中显示部门为0。 我怎样才能做到这一点
在为基本GET服务运行Java集成测试时,我们的应用程序代码无法检索环境变量。然而,当我们运行应用程序本身时,它可以毫无问题地检索变量。 我们正在开发一个Mac(el captiain)与intellij作为我们的IDE。我们已经导出了bash_profile中的变量(例如导出ORACLE_URL="*************").我们可以在设置和刷新后对变量进行回声。 我们完全搞不懂为什么它们在
如果有文件,则显示带有下载元素的task1; task2带有一个上传输入文件元素和一个approve或not(approved)变量;注意,我可以在下一个任务(例如task03)下载文件,但不能在上一个任务下载 批准=false; task1使用file_task2变量显示下载元素;这里是问题
我正在尝试自动测试 Jenkins groovy dsl 脚本,如下所示: https://github.com/sheehan/job-dsl-gradle-example 我认为这个想法非常简单,我遇到的问题是为虚拟Jenkins设置环境变量。我遵循这里的说明: https://wiki.jenkins-ci.org/display/JENKINS/Unit测试 特别是“如何设置环境变量”部分