小编Sap*_*nce的帖子

当结果可能为null时,如何在PL/SQL中选择变量?

有没有办法只运行一次查询以选择变量,考虑到查询可能什么都不返回,那么在这种情况下变量应该为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.

select plsql

65
推荐指数
5
解决办法
27万
查看次数

检查plsql中的记录IS NOT NULL

我有一个函数,它将返回一个类型的记录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)

谢谢.

plsql notnull

21
推荐指数
1
解决办法
4万
查看次数

为什么Oracle 10g不会抱怨列歧义?

我正在使用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_iddepartments.但是,如果我注释掉第二个连接语句(上面的第4行),Oracle会按预期抱怨"ORA-00918:列模糊定义".

那么,有人可以帮助解释如何在Oracle 10g中定义歧义吗?或许这是一个10g的错误?

BTW:这些表是在Oracle 10g中捆绑的默认HR模式中定义的.

更新:刚刚发现了一个相关的帖子: 为什么Oracle SQL神秘地解决了一个连接中的歧义而在其他连接中没有

oracle ambiguity

10
推荐指数
1
解决办法
3961
查看次数

如何在bash中定义动态变量?

我想有一个shell变量,可以在每次引用时动态运行,例如,我想有一个变量$ countPwd,它可以返回当前目录中的files/dirs计数,它可以定义为:

countPwd=`ls | wc -l`
Run Code Online (Sandbox Code Playgroud)

如果我这样做echo $countPwd只会在我定义变量时显示该值,但是当我更改当前目录时它不会自动更新.那么如何在bash中定义这样一个变量,使其值得动态更新/计算?

更新:$ PWD是实时评估变量的完美示例.你不需要使用$()或反引号`来评估它.它是如何在bash中定义的?

variables bash dynamic

0
推荐指数
1
解决办法
1585
查看次数

简单的haskell代码无法编译

我开始学习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首先加载函数没有问题,稍后再调用它.任何帮助,将不胜感激.

haskell

0
推荐指数
2
解决办法
440
查看次数

标签 统计

plsql ×2

ambiguity ×1

bash ×1

dynamic ×1

haskell ×1

notnull ×1

oracle ×1

select ×1

variables ×1