标签: plsql

从PL/SQL包执行立即运行

我在PL/SQL包中有以下代码行

l_sql := 'alter table LOG_FILES location ('||chr(39)|| filename || to_char(sysdate,'DDMMYY') ||chr(39)||'))';
execute immediate l_sql;
Run Code Online (Sandbox Code Playgroud)

pl/sql包编译得很好,但我没有看到变化.alter命令完全没有效果.这有什么理由吗?

注意:我尝试更改的表是Oracle External表.

oracle plsql oracle10g

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

Oracle PL/SQL选择和更新

当我执行这个PL/SQL块时,我一直收到"没有找到数据".如果我注释掉输出行,那么一切都按照我的怀疑输出,但更新语句永远不会执行.有任何想法吗?

set serveroutput on;
Declare
   TYPE type_emp IS RECORD(
        emp_salary emp.salary%TYPE);
     rec_emp type_emp;
   v_stars varchar2(50) ;
   v_count number(3);
   s_num number(3);
begin
 SELECT min(employee_id) into s_num from emp;
 SELECT count(*) into v_count from emp;
 v_count := v_count + s_num;
 for i in s_num .. v_count loop
   SELECT salary
     into rec_emp
     from emp
    where employee_id = i; 
    if rec_emp.emp_salary <1000 then 
        v_stars := null;
      elsif rec_emp.emp_salary >=1000 and rec_emp.emp_salary <2000 then 
        v_stars := '*';
      elsif rec_emp.emp_salary >=2000 and rec_emp.emp_salary <3000 then 
        v_stars …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle10g

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

这个PLSQL代码块有什么问题

从批处理文件执行时,下面的代码块没有运行.它只是挂起(没有任何反应).它坐在那里几个小时.我无法跟踪问题是什么或如何调试它.请帮忙.

declare
v_personrefid varchar2(50);
v_hiredt date;
v_loaddt date;
v_personid number;
v1_personrefid varchar2(50);
v_seq number :=0;

cursor get_row is
select distinct personrefid from ARCHIVE_PERSON;

cursor get_row1 is
select 
personrefid, 
hiredt,
loaddt,
personid
from 
ARCHIVE_PERSON 
where 
personrefid = v_personrefid 
order by hiredt, loaddt;

begin

v_seq:=0;
open Get_row;
loop
fetch get_row into v_personrefid ;
exit when get_row%notfound;

begin

open get_row1;
loop
fetch get_row1 into v1_personrefid, v_hiredt, v_loaddt, v_personid;
exit when get_row1%NOTFOUND;

v_seq:= v_seq+1;

update ARCHIVE_PERSON 
set version = v_seq 
where 
personrefid = v1_personrefid …
Run Code Online (Sandbox Code Playgroud)

oracle plsql plsqldeveloper

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

Spring JDBC模板.如何获取pl/sql脚本的结果变量

我正在使用NamedParameterJdbcTemplate运行pl/sql脚本.但我不知道如何获得out变量的值(:id_out).提前致谢.

String script = "declare 
                   begin 
                     if myFunc(:id_in) is null then 
                        :id_out := 0; 
                     else 
                        :id_out := 1; 
                     end if; 
                   end;";
Map<String,Object> bindVars = new HashMap<String, Object>();
bindVars.put(id_in,1);
bindVars.put(id_out,2);


jdbcTmpl.execute(script, bindVars, new PreparedStatementCallback<Object>() {
    @Override public Object doInPreparedStatement(PreparedStatement cs)
        throws SQLException, DataAccessException {
        cs.execute();
        return null;
                }
       }
       );
Run Code Online (Sandbox Code Playgroud)

java plsql spring-jdbc

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

在PL/SQL(Oracle)中,异常可以跨函数/过程调用传播吗?

因为它发生在封闭的块中
如果一个匿名块调用一个引发异常的函数,那些既不会显示在控制台上也不会被封闭在块中......
更有甚者,在被函数中的处理程序捕获后,在匿名函数调用之后的行块正常执行!

被叫程序是:

CREATE OR REPLACE PROCEDURE qt(pno number, qty OUT number)
IS
BEGIN
select sum(qty_on_hand) into qty from products where productno=pno;
END;
Run Code Online (Sandbox Code Playgroud)

调用块是:

DECLARE
qty number;
BEGIN
qt(&pno, qty);
dbms_output.put_line('qty is: '||qty);
END;
Run Code Online (Sandbox Code Playgroud)

如果产品编号无效,则不会显示错误; 为什么?

oracle plsql stored-procedures exception-handling function

1
推荐指数
2
解决办法
4683
查看次数

是否必须在PL/SQL中为OUT参数赋值?

create or replace procedure ppp(ot OUT number)
is
begin
null;
end;
/
Run Code Online (Sandbox Code Playgroud)

这在被调用时工作正常.

oracle plsql out-parameters

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

在plsql中播放音频/声音

在Plsql中,我希望在遇到特定异常时创建声音(Beep).我试图在许多搜索引擎中搜索,但仍然没有得到关于这个主题的正确结果和研究材料.如果有人知道这一点,那么这对我来说通过使用PLSQL本身来实现这个功能非常有帮助.其他选项我必须调用Java函数来播放音频文件,这是我的最后一个选项.但是第一手我只想借助PLSQL代码来做这件事,这样我的代码就不会依赖Java(或C或任何其他语言).

是否有可能在PLSQL代码中产生声音?如果有人有任何想法,任何建议,任何起点或任何学习材料..请提供.

sql oracle plsql

1
推荐指数
2
解决办法
2705
查看次数

Oracle存储过程,返回ref cursor与关联数组

我们的DBA要求我们从一组关联数组中返回存储过程中的所有表格数据,而不是使用我在Web上的大多数示例中看到的引用游标.他说这是因为Oracle以这种方式做事要快得多,但这对我来说似乎很直观,因为数据需要循环两次,一次在存储过程中,然后再在应用程序中进行处理.此外,值通常需要从其本机类型转换为varchar,以便它们可以存储在数组中,然后在应用程序端进行转换.使用这种方法也很难使用orm工具,因为在大多数情况下它们似乎都需要ref游标.

存储过程的示例如下:

PROCEDURE sample_procedure (
                                p_One       OUT varchar_array_type,
                                p_Two       OUT varchar_array_type,
                                p_Three     OUT varchar_array_type,
                                p_Four      OUT varchar_array_type
                            )
IS
p_title_procedure_name        VARCHAR2(100) := 'sample_procedure';
v_start_time DATE :=SYSDATE;    

CURSOR cur
  IS
    SELECT e.one, e.two, e.three, e.four FROM package.table 
    WHERE filter='something';

    v_counter PLS_INTEGER := 0;
BEGIN

    FOR rec IN cur LOOP
        BEGIN
            v_counter := v_counter + 1;
            p_One(v_counter) := rec.one;
            p_Two(v_counter) := rec.two;
            p_Three(v_counter) := rec.three;
            p_Four(v_counter) := rec.four;
        END;
    END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

游标用于为返回的每列填充一个数组.我试图找到支持他声称这种方法更快但却无法做到这一点的信息.任何人都可以填写我可能希望我们(.net开发人员)以这种方式编写存储过程的原因吗?

arrays oracle plsql oracle11g

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

在oracle中创建一个触发器,它不允许使用if条件进行任何插入或更新

我有两张桌子 -

create table mobile
(
id int,
m_name  varchar(20),
purchase_date datetime
)


insert into mobile values('1','Samsung corby','12-JAN-12');
insert into mobile values('2','Nokia E5','15-MAR-12');
insert into mobile values('3','Sony Talk','10-FEB-12');



create table location
(
id int,
l_name varchar(20)
) 
insert into location values(1,'London');
insert into location values(2,'Washington');
insert into location values(3,'Mexico');
Run Code Online (Sandbox Code Playgroud)

我想创建一个触发器,以确保在12月份无法购买墨西哥的索尼移动设备.这意味着每当我尝试在ID为3且purchase_date为12月的移动表中插入数据时,触发器应该停止并且给出适当的信息.

我的代码是 -

create  or replace  trigger trg1
before insert or update
on mobile
for each row
declare
var1 number(4);  
begin
select id into var1 from location where l_name='Mexico';
    IF (:new.id …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql sqlplus

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

Oracle PL/SQL调试过程 - 使用$$ plsql_line

我正在寻找创建一个有助于调试特定变量的过程,为了重新使用,我想将它存储在它自己的过程中,并在需要时传入特定的变量,如

debugz(var_x);
Run Code Online (Sandbox Code Playgroud)

并且调试过程将执行以下操作 -

PROCEDURE debugz (var_x VARCHAR2(1000))
AS
BEGIN
DBMS_OUTPUT.put_line ('Variable value: '|| var_x || ' | Line number: ' || $$plsql_line ||' | Unit: '|| $$plsql_unit);
END;
Run Code Online (Sandbox Code Playgroud)

问题是,我希望PL/SQL行号和PL/SQL单元基于过程调用的起源,即" debugz(var_x);" 的行/单元.无论如何,debugz输出该行号而不传递其他信息?

sql oracle toad plsql

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