小编Nic*_*nov的帖子

带有PLSQL集合的Listagg函数

我有一个以下类型的PL/SQL集合

type p_typ_str_tab is table of varchar2(4000) index by pls_integer;
Run Code Online (Sandbox Code Playgroud)

我想用一个简单的内联函数将值聚合成一个字符串,就像LISTAGG不编写任何自定义函数或for循环一样.所有示例LISTAGG都没有显示如何使用PL/SQL集合.我正在使用Oracle 11g R2.这可能吗?

oracle collections plsql aggregate-functions oracle11g

4
推荐指数
2
解决办法
5005
查看次数

需要显示一个虚拟月份 - Oracle SQL

对于月费报告目的,需要显示如下所述的输出.只有当月支付费用时才会在表格中输入数据,否则表格中不会显示该月份.

执行查询

select reg_id, dop,to_char(dop, 'FMMonth,YYYY') Month, status 
  from fees_status
 where dop between ('1-Jul-2012') and ('1-Dec-2012')
Run Code Online (Sandbox Code Playgroud)

输出是

REG_ID  DOP         MONTH           STATUS

AE-8    7/1/2012    July,2012       PAID
AE-8    9/1/2012    September,2012  PAID
AE-8    11/1/2012   November,2012   PAID
AE-8    12/1/2012   December,2012   PAID
Run Code Online (Sandbox Code Playgroud)

对于报告目的,需要输出为

REG_ID  DOP         MONTH           STATUS

AE-8    7/1/2012    July,2012       PAID
AE-8    8/1/2012    August,2012     NOTPAID
AE-8    9/1/2012    September,2012  PAID
AE-8    10/1/2012   October,2012    NOTPAID
AE-8    11/1/2012   November,2012   PAID
AE-8    12/1/2012   December,2012   PAID
Run Code Online (Sandbox Code Playgroud)

有人可以帮助显示上面提到的输出吗?

sql oracle

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

带有Null的Oracle SELECT XMLELEMENT

使用Oracle 11,当我这样做

  SELECT XMLELEMENT("dummy", NULL) as xml_1 
    FROM dual
Run Code Online (Sandbox Code Playgroud)

输出是 <dummy></dummy>

我怎么强行回来 <dummy />

xml oracle oracle11g

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

将列值从"男性"替换为"女性",将"女性"替换为"男性"

我有一个表性别,其中只有两个条目有'男'和'女'行数,只有这2个条目.现在我想编写一个替换这两个值的过程,输出应如下所示,

i/p             o/p 

sex             sex
------------------------
male           female
female          male
female          male
male           female
Run Code Online (Sandbox Code Playgroud)

我正在创建一个程序,它给了我一个错误,我使用一个游标来获取超过1行..我知道我们可以通过只使用1个更新语句来做到这一点,但我想尝试这样,请看看这个. .

declare
  v_gen gender%rowtype;
  cursor cur_gender is
    select * from gender;
begin
  open cur_gender;
  loop
    fetch cur_gender into v_gen;
    select * from gender;
    if v_gen='male' 
    then
      update gender set sex='female';
    else
      update gender set sex='male';
    end if;
    exit when v_gen%notfound;  
  end loop;
  close cur_gender;
end; 
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle10g

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

Oracle SQl Dev,如何在2个日期之间计算工作日的数量

有谁知道如何计算两个日期字段之间的工作日数?我正在使用oracle sql developer.我需要找到多个开始和结束日期之间的平日工作日.因此,我需要获取每条记录的天数,以便我可以将它们平均化.这可以在SELECT我的查询部分中作为一行完成吗?

sql oracle date count

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

如何在触发器内引发异常?有没有办法做到这一点?

有一种情况:如果Salary列的更新值小于其原始值,则打印错误消息并且不允许更新.这是我到目前为止所写的:

CREATE OR REPLACE TRIGGER TRIG1
BEFORE UPDATE OF SAL ON EMP
for each row
  USER_XCEP EXCEPTION
  WHEN (NEW.SAL<OLD.SAL)
BEGIN
  RAISE USER_XCEP

EXCEPTION
  WHEN USER_XCEP THEN
       DBMS_OUTPUT.PUT_LINE('UPDATION NOT ALLOWED - ILLEGAL VALUES');
END;
Run Code Online (Sandbox Code Playgroud)

我得到错误 - 错误的触发器规范

有没有其他方法来实现这一目标?

database oracle plsql exception

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

ORA-00902:数据类型无效

我运行以下查询时收到上述错误

create table customer (
  cust_fname   varchar2(15) NOT NULL,
  cust_lname   varchar2(15) NOT NULL,
  cust_id      number(9,0) NOT NULL,
  address      varchar2(40) NOT NULL,
  city         varchar2(14) NOT NULL,
  postal_code  number(6,0) NOT NULL,
  country      varchar2(14) NOT NULL,
  phone_no     number(12,0) NOT NULL,
  e-mail       varchar2(30) NOT NULL,
  password     varchar2(10) NOT NULL,
  primary key(cust_id),
  check(e-mail like '_%@_%._%')
);
Run Code Online (Sandbox Code Playgroud)

请告诉我们是什么问题.

oracle

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

oracle的时差

嗨我有下表,其中包含开始时间,结束时间,总时间


STARTTIME            | ENDTIME             | TOTAL TIME TAKEN  |
02-12-2013 01:24:00  | 02-12-2013 04:17:00 |  02:53:00         |
Run Code Online (Sandbox Code Playgroud)

我需要TOTAL TIME TAKEN使用oracle中的更新查询更新上面的字段

为此,我尝试了以下选择查询

select  round((endtime-starttime) * 60 * 24,2),
        endtime,
        starttime 
  from purge_archive_status_log
Run Code Online (Sandbox Code Playgroud)

但是我得到了02.53,但是我的期望格式是02:53:00请让我知道我该怎么做?

oracle timestamp

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

Oracle 中是否可以使虚拟列不再虚拟?

我们有一个用(可为空的)虚拟列定义的 Oracle 表。出于多种原因,我们决定实际上应提前生成此列并按正常方式填充。是否可以修改该列,使其不再是虚拟的,而无需删除并重新添加它?

以下不起作用:

alter table mytable modify virtualcolumn varchar2(255)
Run Code Online (Sandbox Code Playgroud)

它成功返回,但生成函数仍然存在。我在 Oracle 11g 语法图中没有看到任何有关删除“虚拟”属性的内容,这让我相信这目前是不可能的。

sql oracle

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

PL/SQL:如何从游标创建类型

我可以从游标定义类型吗?

目前我必须编写以下内容以便从某些表字段创建记录变量:

declare

    cursor cur
    is
        select 
            f_1,
            f_2,
            f_3,
            f_4
        from
            mytable
        where 
            1=0;

    myvar cur%rowtype;              -- use the cursor to declare myvar

begin
    null;
end;
Run Code Online (Sandbox Code Playgroud)

我想写这样的东西:

declare

    cursor cur
    is
        select 
            f_1,
            f_2,
            f_3,
            f_4
        from
            mytable
        where 
            1=0;

    type mytype is cur%rowtype;     -- declare "mytype" from cursor
    myvar mytype;                   -- use "mytype" to declare "myvar"

begin
    null;
end;
Run Code Online (Sandbox Code Playgroud)

这在这个简单的例子中看起来并不有用,但在实际问题中可能有用.

另一种方法是手动创建记录类型:

declare

    type mytype is record           -- declare "mytype"
    (
        f_1    mytable.f_1%type,
        f_2    mytable.f_2%type,
        f_3    mytable.f_3%type,
        f_4    mytable.f_4%type …
Run Code Online (Sandbox Code Playgroud)

oracle types plsql record

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