标签: plsql

使用oracle SQL将字符串解析为表

家伙.说我有下表:

ID | String
---+---------  
1  | <123><345>  
2  | <1-2><45-67>  
3  | <345-321><234>
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序中的遗留数据格式,目前无法避免.我需要做的是:

ID | String
---+---------
1  | <123>  
1  | <345>  
2  | <1-2>  
2  | <45-67>  
3  | <345-321>  
3  | <234>  
Run Code Online (Sandbox Code Playgroud)

有关如何在不创建任何其他对象或pl-sql过程的情况下仅使用普通Oracle SQL获得此结果的任何建议?

谢谢.

sql oracle plsql oracle9i

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

PL/SQL中的日期范围

如果我有一个名为Date列(Date字段)的表created_date,其值为"9/2/2010 5:25:42 PM".

我想选择从a start_date到a的所有行end_date.但是,end_date可能是null.在这种情况下,我想选择created_date大于的所有行end_date.

sql plsql

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

这个程序中的错误是什么?

我编写了以下pl/sql程序,无法检测错误:

 declare
 variable a number;
 b number:=2354;
 begin
 b:=:a;
 end;
Run Code Online (Sandbox Code Playgroud)

这个错误是

SP2-0552:未声明绑定变量"A".

请帮忙......

oracle variables plsql sqlplus

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

简单的oracle触发器

简单的一个.我有点像PLSql的新手,oracle的错误信息永远不会太有帮助.

我想做一个简单的触发器来更新具有当前日期的列,即表的"修改日期"列.虽然得到一个奇怪的错误.

这个想法很简单

create table test1 (tcol varchar2(255), tcol2 varchar2(255))

CREATE OR REPLACE TRIGGER testTRG
AFTER INSERT OR UPDATE ON test1
FOR EACH ROW
BEGIN 
     update test1
     set tcol2 =  to_char(sysdate)
     where tcol = :OLD.tcol;
END;

insert into test1 (tcol) values ('test1');
Run Code Online (Sandbox Code Playgroud)

这会弹出错误:

ORA-04091: table RAIDBIDAT_OWN.TEST1 is mutating, trigger/function may not see it
ORA-06512: at "RAIDBIDAT_OWN.TESTTRG", line 2
ORA-04088: error during execution of trigger 'RAIDBIDAT_OWN.TESTTRG'
Run Code Online (Sandbox Code Playgroud)

有人可以快速解决这个问题吗?

干杯,

F.

oracle triggers plsql ora-04091 mutating-table

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

Oracle sql函数

我有一个称为列的表Type,其可以具有三个值(name1,name2,name3).

我可以编写一个查询,首先返回带有Type= 的记录,name1然后是带有值name2和name3带WHERE子句的行,所以我可以通过CreationDate例如过滤它们吗?

这意味着,返回一天01/01/2000:

row  'name1'
row  'name1'
(rest of the rows)
Run Code Online (Sandbox Code Playgroud)

Id   Type    CreationDate  
1,  'name1', '2000/01/01'  
8,  'name1', '2000/01/01'  
18, 'name3', '2000/01/01'  
82, 'name2', '2000/01/01'  
11, 'name2', '2000/01/01'  
12, 'name3', '2000/01/01'  
2,  'name1', '2000/01/02'  
4,  'name1', '2000/01/02'  
98, 'name2', '2000/01/02'  
Run Code Online (Sandbox Code Playgroud)

对于每一天,首先获取"name1"类型的记录,然后获取其他类型的记录,而不是订单.

谢谢!你做.

sql oracle plsql

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

plsql游标通过直接sql

我正在查看以下两种检索值的方法,并稍后通过insert语句存储它.即通过Pl/SQL游标或直接SQL.两种方法都有任何优势吗?还是有更有效的方法?

方法1

Cursor system_date
Is 
 select sysdate from dual;
system_date_rec system_date%type;

Open system_Date;
Fetch system_date into system_date_rec;

Insert into table(dateValue)
values(system_date_rec.date);
Run Code Online (Sandbox Code Playgroud)

方法2

dateString  varchar(20);
Select sysdate into dateString from dual;
Insert into table(dateValue)
values(dateString);
Run Code Online (Sandbox Code Playgroud)

oracle plsql plsqldeveloper

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

如何在PL/SQL中进行总结

鉴于我有一个包含用户数据的表,如下所示:

userID     calltime     result 
1         10:20         1
1         11:00         2
1         11:30         1
2         9:30          1
2         11:00         1
3         10:00         1
3         10:30         2
3         11:00         1
3         11:30         2
Run Code Online (Sandbox Code Playgroud)

现在我想这样总结一下:

userID     result1    result2
1             2         1
2             2         0
3             2         2
(total)       6         3
Run Code Online (Sandbox Code Playgroud)

对我来说,总结用户数据很好,但是如何在查询中添加总行?UNION不适用于此.

非常感谢你做的这些.

编辑:这是我当前的查询,当然,它不起作用:

  PROCEDURE P_SUMMARIZE_CALL
  (
    pStartDate IN DATE,
    pEndDate IN DATE,
    SummaryCur  OUT MEGAGREEN_CUR    
  )
  IS
  BEGIN
    OPEN SUMMARYCUR FOR
    SELECT USERID, TOTALCALLS,CONNECTEDCALLS,RATE,NOANSWER FROM
    (((SELECT USERID,
            count(CALLID) AS TOTALCALLS, 
            sum(CONNECTED) as CONNECTEDCALLS, …
Run Code Online (Sandbox Code Playgroud)

database oracle plsql aggregate

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

我需要一个可以在时间间隔之间搜索的SQL脚本

我需要一个SQL查询来执行以下操作:

select ..........
from ....
where ....
and arrival_time between systemtime and (systemtime + 7 hours )
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle10g

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

在sql server中的where语句之后使用(+)

我怎样才能将以下plsql转换为tsql.B.STATUS(+)=1在tsql中不起作用.

  Select * from A,B where A.ID=B.ID(+)
     WHERE B.STATUS(+)=1
Run Code Online (Sandbox Code Playgroud)

这不会返回mssql中的行,因为它不理解B.STATUS是可选的

 Select * from A LEFT JOIN B ON A.ID=B.ID
WHERE B.STATUS=1
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server oracle plsql

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

Oracle:收到ORA-06550和PLS-00905

我有一个包含数据的假期表

    HOLIDAYDA DESCRIPTION
   --------- --------------------
   19-JAN-11 to
   17-JAN-11 to
   10-JAN-11 new day
Run Code Online (Sandbox Code Playgroud)

现在我想要一周的第一个工作日.IE:如果我通过"12-JAN-2011"作为输入,我希望o-p作为2011年1月11日作为第1个工作日,因为10-JAN-2011是假日.

这是我的代码:

create or replace procedure sample as
   l_dStartDay date;
   l_dHolidayDate date;
begin

    select trunc(to_date(sysdate),'Day') 
      into l_dStartday 
      from dual;

 dbms_output.put_line('first day of the week ');
 dbms_output.put_line(l_dStartDay);

 for i in 2..5 Loop
   select holidaydate 
     from holiday 
     into l_dHolidayDate 
    where holidaydate = (l_dStartDay + i);

  if(l_dHolidaydate is null) then
    dbms_output.put_line(l_dStartDay+i);
  end if;
exit;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)

我编译了上面的程序,但是" 使用编译错误创建了程序" .

新增:补充错误:

 LINE/COL ERROR
 -------- -----------------------------------------------------------------
 9/1      PL/SQL: SQL Statement ignored …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql ora-00933 ora-06550

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