PL/SQL中是否有异步调用的功能?假设我在一个代码块中想多次调用一个过程,并且不会打扰何时以及该过程返回什么?
BEGIN
myProc(1,100);
myProc(101,200);
myProc(201,300);
...
...
END;
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我不希望我的代码在执行之前等待myProc(1,100)完成处理(101,200)
谢谢.
我有这样的存储过程
procedure P_IssueUpdate
(
Id in integer,
ModifiedDate in date,
Solution in varchar2
) AS
BEGIN
update T_Issue
Set
ModifiedDate = ModifiedDate,
Solution = Solution
where id = id;
END P_IssueUpdate;
Run Code Online (Sandbox Code Playgroud)
我的问题是参数名称与表列名称相同.有没有办法指示sql"="之后的值应该是参数而不是列?
谢谢你的帮助
我有一个使用包的脚本(PKG_MY_PACKAGE).我将更改该包中的查询中的一些字段,然后重新编译它(我不更改或编译任何其他包).我运行脚本,我得到一个看起来像的错误
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "USER3.PKG_MY_PACKAGE" has been invalidated
ORA-04065: not executed, altered or dropped package body "USER3.PKG_MY_PACKAGE"
ORA-06508: PL/SQL: could not find program unit being called: "USER3.PKG_MY_PACKAGE"
ORA-06512: at line 34
我再次运行脚本(不更改系统中的任何其他内容)并且脚本成功执行.
我认为,在我编写之前,我执行了修复任何无效引用的脚本.这是100%可重复的,我使用这个脚本越多,它就越烦人.什么可能导致这种情况,以及会解决什么问题?
(oracle 10g,使用PL/SQL Developer 7)
我试图在存储在c:\驱动器名为vin1.txt的文件中写入并收到此错误.请提示!
> ERROR at line 1: ORA-29280: invalid
> directory path ORA-06512: at
> "SYS.UTL_FILE", line 18 ORA-06512: at
> "SYS.UTL_FILE", line 424 ORA-06512: at
> "SCOTT.SAL_STATUS", line 12 ORA-06512:
> at line 1
Run Code Online (Sandbox Code Playgroud)
这是代码
create or replace procedure sal_status
(
p_file_dir IN varchar2,
p_filename IN varchar2)
IS
v_filehandle utl_file.file_type;
cursor emp Is
select * from employees
order by department_id;
v_dep_no departments.department_id%TYPE;
begin
v_filehandle :=utl_file.fopen(p_file_dir,p_filename,'w');--Opening a file
utl_file.putf(v_filehandle,'SALARY REPORT :GENERATED ON %s\n',SYSDATE);
utl_file.new_line(v_filehandle);
for v_emp_rec IN emp LOOP
v_dep_no :=v_emp_rec.department_id; …Run Code Online (Sandbox Code Playgroud) 无论如何将ArrayList拆分成不同的部分而不知道它的大小直到运行时?我知道有一种叫做的方法:
list.subList(a,b);
Run Code Online (Sandbox Code Playgroud)
但我们需要明确提到盯着和结束范围的清单.我的问题是,我们得到一个包含帐号的arraylist,其中包含2000,4000个帐号的数据(编码时间内不会知道数字),我需要将此符号传递给PL/SQL的IN查询,如IN不支持超过1000个值,我试图分成多个块并将其发送到查询
注意:我不能使用像番石榴等任何外部库.. :(在这方面的任何指南表示赞赏.
我已经看到了为MS SQL Server提出的问题(和答案),尽管我还不知道有关Oracle和PL/SQL的问题.是否有适用于Oracle PL/SQL的xUnit样式测试框架?这些是什么?
哪个是批量插入Oracle数据库的更好选择?一个FOR Cursor循环就像
DECLARE
CURSOR C1 IS SELECT * FROM FOO;
BEGIN
FOR C1_REC IN C1 LOOP
INSERT INTO BAR(A,
B,
C)
VALUES(C1.A,
C1.B,
C1.C);
END LOOP;
END
Run Code Online (Sandbox Code Playgroud)
或简单的选择,如:
INSERT INTO BAR(A,
B,
C)
(SELECT A,
B,
C
FROM FOO);
Run Code Online (Sandbox Code Playgroud)
任何一个特定原因要么更好?
我有这张桌子:
ALLITEMS
---------------
ItemId | Areas
---------------
1 | EAST
2 | EAST
3 | SOUTH
4 | WEST
Run Code Online (Sandbox Code Playgroud)
DDL:
drop table allitems;
Create Table Allitems(ItemId Int,areas Varchar2(20));
Insert Into Allitems(Itemid,Areas) Values(1,'east');
Insert Into Allitems(ItemId,areas) Values(2,'east');
insert into allitems(ItemId,areas) values(3,'south');
insert into allitems(ItemId,areas) values(4,'east');
Run Code Online (Sandbox Code Playgroud)
在MSSQL中,要从动态SQL获取游标,我可以这样做:
DECLARE @v_sqlStatement VARCHAR(2000);
SET @v_Sqlstatement = 'SELECT * FROM ALLITEMS';
EXEC (@v_sqlStatement); --returns a resultset/cursor, just like calling SELECT
Run Code Online (Sandbox Code Playgroud)
在Oracle中,我需要使用PL/SQL块:
SET AUTOPRINT ON;
DECLARE
V_Sqlstatement Varchar2(2000);
outputData SYS_REFCURSOR;
BEGIN
V_Sqlstatement := 'SELECT * FROM ALLITEMS'; …Run Code Online (Sandbox Code Playgroud) 给定以下Oracle(10g)包定义:
create or replace PACKAGE "foo"
AS
bar VARCHAR2(32000) := NULL;
END;
Run Code Online (Sandbox Code Playgroud)
酒吧的范围是什么?每个会话是否都有自己的foo.bar,或者跨会话是foo.bar全局?
你能从参考文件中引用章节和经文吗?
我可以获取包中所有函数的名称吗?假设我有一个包PKG_OWA,我想列出包内的所有程序.
plsql ×10
oracle ×9
sql ×2
asynchronous ×1
java ×1
oracle10g ×1
oracle9i ×1
unit-testing ×1
utl-file ×1