有没有办法只运行一次查询以选择变量,考虑到查询可能什么都不返回,那么在这种情况下变量应该为null.
目前,我无法select into直接执行变量,因为如果查询什么都不返回,PL/SQL会抱怨变量没有设置.我只能运行查询两次,第一个执行计数,如果计数为零,则将变量设置为null,如果计数为1,则选择变量.
所以代码就像:
v_column my_table.column%TYPE;
v_counter number;
select count(column) into v_counter from my_table where ...;
if (v_counter = 0) then
v_column := null;
elsif (v_counter = 1) then
select column into v_column from my_table where ...;
end if;
Run Code Online (Sandbox Code Playgroud)
谢谢.
更新:我没有使用异常的原因是我在分配之后仍然有一些跟随逻辑v_column,我必须goto在异常部分中使用跳转回以下代码.我有点犹豫不决goto.
我有一个函数,它将返回一个类型的记录my_table%ROWTYPE,并在调用者,我可以检查返回的记录是否为空,但PL/SQL抱怨if语句
PLS-00306:调用'IS NOT NULL'时参数的数量或类型错误
这是我的代码:
v_record my_table%ROWTYPE;
v_row_id my_table.row_id%TYPE := 123456;
begin
v_record := myfunction(v_row_id)
if (v_record is not null) then
-- do something
end if;
end;
function myfunction(p_row_id in my_table.row_id%TYPE) return my_table%ROWTYPE is
v_record_out my_table%ROWTYPE := null;
begin
select * into v_record_out from my_table
where row_id = p_row_id;
return v_record_out;
end myfunction;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在使用Oracle 10g(XE 10.2.0.1.0),并找到一个我不理解的行为:
select *
from employees manager
join employees worker on MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID
join departments on DEPARTMENTS.manager_id = 108
where
department_id = 100
;
Run Code Online (Sandbox Code Playgroud)
问题是我认为Oracle应该抱怨department_idwhere子句中的歧义,因为它是表employees和表中的一列departments.事实是在Oracle 10g中,它没有,结果表明它将其解释department_id为departments.但是,如果我注释掉第二个连接语句(上面的第4行),Oracle会按预期抱怨"ORA-00918:列模糊定义".
那么,有人可以帮助解释如何在Oracle 10g中定义歧义吗?或许这是一个10g的错误?
BTW:这些表是在Oracle 10g中捆绑的默认HR模式中定义的.
更新:刚刚发现了一个相关的帖子: 为什么Oracle SQL神秘地解决了一个连接中的歧义而在其他连接中没有
我想有一个shell变量,可以在每次引用时动态运行,例如,我想有一个变量$ countPwd,它可以返回当前目录中的files/dirs计数,它可以定义为:
countPwd=`ls | wc -l`
Run Code Online (Sandbox Code Playgroud)
如果我这样做echo $countPwd只会在我定义变量时显示该值,但是当我更改当前目录时它不会自动更新.那么如何在bash中定义这样一个变量,使其值得动态更新/计算?
更新:$ PWD是实时评估变量的完美示例.你不需要使用$()或反引号`来评估它.它是如何在bash中定义的?
我开始学习Haskell,只是尝试了一个简单的代码,它在我运行时向我显示了一些错误
doubleMe :: Int -> Int
doubleMe x = x + x
main = do
doubleMe 2
Run Code Online (Sandbox Code Playgroud)
ghc -c first.hs
错误是:
$ ghc -c first.hs
first.hs:4:1:无法匹配期望的类型
IO t0' with actual typeInt'在表达式中:main检查函数的类型`main'
当我使用GCHi进行调试时,doubleMe首先加载函数没有问题,稍后再调用它.任何帮助,将不胜感激.