我有一个以下类型的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.这可能吗?
对于月费报告目的,需要显示如下所述的输出.只有当月支付费用时才会在表格中输入数据,否则表格中不会显示该月份.
执行查询
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)
有人可以帮助显示上面提到的输出吗?
使用Oracle 11,当我这样做
SELECT XMLELEMENT("dummy", NULL) as xml_1
FROM dual
Run Code Online (Sandbox Code Playgroud)
输出是 <dummy></dummy>
我怎么强行回来 <dummy />?
我有一个表性别,其中只有两个条目有'男'和'女'行数,只有这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) 有谁知道如何计算两个日期字段之间的工作日数?我正在使用oracle sql developer.我需要找到多个开始和结束日期之间的平日工作日.因此,我需要获取每条记录的天数,以便我可以将它们平均化.这可以在SELECT我的查询部分中作为一行完成吗?
有一种情况:如果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)
我得到错误 - 错误的触发器规范
有没有其他方法来实现这一目标?
我运行以下查询时收到上述错误
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)
请告诉我们是什么问题.
嗨我有下表,其中包含开始时间,结束时间,总时间
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 表。出于多种原因,我们决定实际上应提前生成此列并按正常方式填充。是否可以修改该列,使其不再是虚拟的,而无需删除并重新添加它?
以下不起作用:
alter table mytable modify virtualcolumn varchar2(255)
Run Code Online (Sandbox Code Playgroud)
它成功返回,但生成函数仍然存在。我在 Oracle 11g 语法图中没有看到任何有关删除“虚拟”属性的内容,这让我相信这目前是不可能的。
我可以从游标定义类型吗?
目前我必须编写以下内容以便从某些表字段创建记录变量:
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)