create or replace procedure test1 (
in name varchar(128)
)
begin
declare val varchar(128);
set val = (select schemaname
from syscat.schemata where schemaname = name);
end @
使用select into
create or replace procedure test2 (
in name varchar(128)
)
begin
declare val varchar(128);
select schemaname into val
from syscat.schemata where schemaname = name;
end @
呼叫设置
$ db2 "call test1('nada')"
Return Status = 0
调用选择到
$ db2 "call test2('nada')"
Return Status = 0
SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a
query is an empty table. SQLSTATE=02000
WHILE (STATUS_PART <> '') DO
CALL DBMS_LOCK.SLEEP(1);
SET STATUS_PART = (SELECT STATUS
FROM SYSCAT.DATAPARTITIONS
WHERE TABSCHEMA = TABLE_SCHEMA
AND TABNAME = TABLE_NAME
AND DATAPARTITIONNAME LIKE 'SQL%' WITH UR);
END WHILE;
但以下情况则不然:
WHILE (STATUS_PART <> '') DO
CALL DBMS_LOCK.SLEEP(1);
SELECT STATUS INTO STATUS_PART
FROM SYSCAT.DATAPARTITIONS
WHERE TABSCHEMA = TABLE_SCHEMA
AND TABNAME = TABLE_NAME
AND DATAPARTITIONNAME LIKE 'SQL%' WITH UR;
END WHILE;
4条答案
按热度按时间mbyulnm01#
当发出select时,它不返回任何值:
您可以使用以下两个存储过程检查差异:
使用设定:
使用select into
呼叫设置
调用选择到
这是两者之间的区别,当使用select into时,你必须处理处理程序。
bhmjp9jg2#
据我所知,他们是
在某些情况下,你会做一个技术超过另一个。
例如,不能在SET中使用WITH UR
SET var1=(从t中选择....,带ur)
但能做
cs7cruho3#
当查询结果是测试条件的一部分时。
例如,当分离分区并等待异步进程时,将执行以下操作:
但以下情况则不然:
x8diyxa74#
SELECT INTO
适用于SELECT
语句。使用
SET
,您可以直接分配函数的结果,进行计算或分配不同的变量。例如: