如果我在存储过程中使用FOR UPDATE子句应该何时"提交"?关闭打开的光标后或关闭打开的光标之前?以下是我正在使用的程序,我是以正确的方式做的吗?
CREATE OR REPLACE PROCEDURE Proc_UpdateCSClientCount(inMerid IN VARCHAR2,
outCliCount OUT NUMBER,
outretvalue OUT NUMBER)
AS
CURSOR c1 IS
SELECT CLIENT_COUNT
FROM OP_TMER_CONF_PARENT
WHERE MER_ID = inMerid
FOR UPDATE OF CLIENT_COUNT;
BEGIN
OPEN c1;
IF SQL%ROWCOUNT = 1 THEN
FETCH c1 INTO outCliCount;
outCliCount := outCliCount + 1;
UPDATE OP_TMER_CONF_PARENT
SET CLIENT_COUNT = outCliCount
WHERE CURRENT OF c1;
END IF;
outretvalue := 0;
CLOSE c1;
COMMIT;
EXCEPTION
WHEN no_data_found THEN
outretvalue := -1;
END;
Run Code Online (Sandbox Code Playgroud) 根据这个问题,在Oracle中执行相等性检查的方法,我想将null视为等于null就像是
SELECT COUNT(1)
FROM TableA
WHERE
wrap_up_cd = val
AND ((brn_brand_id = filter) OR (brn_brand_id IS NULL AND filter IS NULL))
Run Code Online (Sandbox Code Playgroud)
这实际上可以使我的代码变脏,特别是如果我有很多这样的地方,并且where应用于多个列.有更好的选择吗?
我尝试将一些文本信息加载到clob字段中.我减少了代码,我遇到了以下代码:
DECLARE
WS_MAIN_CHUNK RAW(12001);
BEGIN
WS_MAIN_CHUNK := 'Do';
END;
/
Run Code Online (Sandbox Code Playgroud)
它给出了错误ORA-06512 PL/SQL:数字或值错误:十六进制到原始转换错误.为什么字符串'Do'是十六进制值,如何修复它?>只需将字符串赋值给原始变量?
谢谢你的帮助
我正在做大学作业,要求我创建一个PLSQL程序,用户可以在其中添加包含多个项目和每个项目数量的新客户订单.我想出了以下内容,要求用户输入一些要添加到订单中的项目,然后使用循环来询问特定的详细信息,例如产品编号和数量.我在运行时遇到用户输入问题...在编译代码时,它会询问产品代码和数量,并且不会在运行时再次询问它而是保存先前在编译时给出的值...
CREATE OR REPLACE
PROCEDURE Add_Order (Item_amount IN NUMBER, CustNo IN NUMBER) AS
ItemNo NUMBER;
var_Quantity NUMBER;
var_PONo NUMBER;
BEGIN
IF Item_amount BETWEEN 2 AND 9 THEN
SELECT seq_PONo.NEXTVAL INTO var_PONo from dual;
INSERT INTO PurchaseOrder_tab
SELECT var_PONo, REF(C),
SYSDATE,
ItemList_tab()
FROM Customer_tab C
WHERE C.CustNo = CustNo;
FOR i IN 1..Item_amount LOOP
DBMS_OUTPUT.PUT_LINE('INSIDE LOOP');
ItemNo := &Enter_ProdCode;
var_Quantity := &Quantity_Amount;
INSERT INTO TABLE (
SELECT P.ItemList
FROM PurchaseOrder_tab P
WHERE P.PONo = var_PONo
)
SELECT seq_ItemNo.nextval, REF(Pr), var_Quantity
FROM …Run Code Online (Sandbox Code Playgroud) 在Oracle中,有一个直接的方法来获得一周的第一天给出一周的数字吗?
例如,今天的日期是12/4/2012.如果我运行:从双重选择to_char(sysdate,'WW'); 它返回49作为周数.
我想做的是第一天以某种方式返回2012年12月2日...给出第49周(假设星期日是一周的第一天).
有任何想法吗?在此先感谢您的帮助!
我有这样的代码:
set serveroutput on
declare
v_str varchar2(200);
begin
v_str := q'!dbms_output.put_line('Hello world');!';
Execute immediate v_str;
end;
Run Code Online (Sandbox Code Playgroud)
Oracle SQL Developer说存在无效的SQL语句,这是什么问题?
我只是有一个奇怪的问题.我知道这可能很有趣,但我对这个有好奇心.这是我的问题:
假设数据库中有一个名为"gender"的列具有布尔值,即0或1. 0 =男性,1 =女性.现在,当我们显示具有此类型字段的表单的数据时,我们必须执行代码(gender=0)?Male:Female.
现在我只想知道sql是否提供了任何方式,在生成记录集时自动将所有性别值自动替换为男性或女性.即不需要这一行代码?
select yearreported
, theleadcraft
, count(NotStage3)
, count(NotStage2)
, count(NotStage1)
from
(
select extract(year from reportdate) as YearReported
, Nvl(leadcraft, 'NONE') as TheLeadCraft
, CASE when status not in ('CAN', 'CLOSE') then 1 else 0 END as NotStage3
, CASE when status not in ('CAN', 'CLOSE', 'COMP') then 1 else 0 END as NotStage2
, CASE when status not in ('CAN', 'CLOSE', 'COMP', 'WORKDONE') then 1 else 0 END as NotStage1
from workorder
) …Run Code Online (Sandbox Code Playgroud) 我开始使用PL/SQL并学习如何编写procedures,exceptions但我似乎无法掌握如何显示错误.这个过程很简单,它只能做简单的数学运算,如下所示:
create or replace
procedure get_simple_math
(n_num1 in number,
n_num2 in number,
n_answer out number,
n_err_code out number,
n_err_msg out varchar2)
as
begin
n_answer := (n_num1 / n_num2);
dbms_output.put_line('Answer is '||n_answer);
n_err_code := 0;
exception
when others
then
n_err_code := SQLCODE;
n_err_msg := 'Error in get_simple_math '||SQLERRM;
raise_application_error (-20002,n_err_msg);
end get_simple_math;
Run Code Online (Sandbox Code Playgroud)
正如你可以看到它没什么特别的,但我不能让我的生活得到block运行:
set serveroutput on
declare
n_answer number := 0;
n_err_code number;
n_err_msg varchar2;
begin
get_simple_math(10,5,n_answer);
end;
Run Code Online (Sandbox Code Playgroud)
我假设我需要声明设置的变量out,这就是为什么它们在那里.我也尝试将它们添加到procedure执行中:
get_simple_math(10,5,n_answer,n_err_code,n_err_msg);
Run Code Online (Sandbox Code Playgroud)
但这似乎没有诀窍,所以我只是在寻找解决这个问题的一些帮助.提前致谢.
我在PL/SQL中有以下存储过程:
CREATE OR REPLACE PROCEDURE sample_procedure AS
DECLARE
TYPE list_of_names_t
IS TABLE OF emp.emp_index%TYPE;
ignoreIndexes LIST_OF_NAMES_T := List_of_names_t();
BEGIN
-- Logic here which fills the values in the collection ignoreIndexes
END;
Run Code Online (Sandbox Code Playgroud)
从外部调用此存储过程时,如下所示:
SET SERVEROUTPUT ON
EXEC sample_procedure
-- Line YY
Run Code Online (Sandbox Code Playgroud)
@Eline YY,我想从emp表中检索记录,其中索引不在ignoreindexes存储过程中准备的集合中.
1)如何将ignoreindexes在存储过程中创建的嵌套表返回给外部世界,以便我可以使用该表中的索引
提前致谢