简单的一个.我有点像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.
鉴于我有一个包含用户数据的表,如下所示:
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) 我必须从用户输入为JAVA程序中的oracle表动态创建分区.如果用户输入3,我必须制作3个分区.以前有一个包含大约100列的表格.但我的问题是,当我在Sql Developer中执行以下查询时,它给出了错误,如下所示.
是否可以使用alter命令一次添加三个或更多分区,或者我必须为三个分区更改表三次?
我正在使用'Oracle 9i',建议一些事情
提前致谢
Sql查询
ALTER TABLE table_01 add
partition p2 values less than(20),
partition p3 values less than(30),
partition p4 values less than(40);
Run Code Online (Sandbox Code Playgroud)
错误
Error report -
SQL Error: ORA-14043: only one partition may be added
14043. 00000 - "only one partition may be added"
*Cause: ALTER TABLE ADD PARTITION contained descriptions of more than one
partition to be added
*Action: Ensure that the statement contains exactly one partition
definition and that it does not contain any …Run Code Online (Sandbox Code Playgroud) 我有一个名为MY_MOVIES的表,有两列:MOVIES和GENRES就像这样(关系是一部电影到很多类型):
GENRE MOVIE
---------- --------------
ACTION MOVIE1
DRAMA MOVIE1
CRIME MOVIE2
DRAMA MOVIE2
CRIME MOVIE3
DRAMA MOVIE3
ACTION MOVIE4
ADVENTURE MOVIE4
FANTASY MOVIE4
ANIMATION MOVIE5
ADVENTURE MOVIE5
COMEDY MOVIE5
Run Code Online (Sandbox Code Playgroud)
该表有超过100000行.
我想要得到这样的输出:
MOVIES GENRES
---------- --------------
MOVIE1 ACTION, DRAMA
MOVIE2 CRIME, DRAMA
MOVIE3 CRIME, DRAMA
MOVIE4 ACTION, ADVENTURE, FANTASY
MOVIE5 ANIMATION, ADVENTURE, COMEDY
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用像这样的PIVOT(有了将0和1替换为类型的想法):
SELECT * FROM MY_MOVIES
PIVOT (COUNT(MOVIE) FOR GENRE in (SELECT DISTINCT(GENRE) FROM MY_MOVIES) as MOVIE_GENRES
Run Code Online (Sandbox Code Playgroud)
我一直以为我做错了.
我想在oracle db中通过分隔符(|)拆分列.我怎样才能做到这一点?
在db中,值将存储为:
领域
AP1|Apple Juice|100
Run Code Online (Sandbox Code Playgroud)
我想分开它成为:
Field1 | Field2 | Field3
AP1 Apple Juice 100
Run Code Online (Sandbox Code Playgroud)
我不知道确切的查询,但基本上下面是我想要的.
select split(Field) as Field1, split(Field) as Field2, split(Field) as Field3
Run Code Online (Sandbox Code Playgroud)
我想只使用SQL(不创建任何存储过程或函数).
我对 javascript/node.js 还很陌生,我正在尝试让一个非常基本的场景工作:连接到 MongoDB,将 JSON 响应转换为 CSV,将其写入文件。我试过如下
fs = require('fs');
var MongoClient = require('mongodb').MongoClient;
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var Json2csvStream = require('json2csv-stream');
var Stream = require('stream');
var JSONStream = require('JSONStream');
var es = require('event-stream');
var csv = require('csv');
var fields = ['execAmendTime', 'execTime', 'execType', 'lastMkt', 'manualExecFlag', 'orderId', 'riskTrade', 'rootOrdId', 'salesCommissionRate', 'salesCommissionType', 'theoPov20Px',
'theoPov20BL', 'tradeFlags', 'tradeNotes', 'transactTime', 'version', 'book.bookName', 'businessUnit', 'commissionRate', 'commissionSource', 'commissionType', 'counterBook.bookName',
'counterParty.name', 'createTime', 'currency', 'direction', 'execQuantity', 'fxRate','orderQuantity', 'positionTrader.name', 'price', 'primaryTrader.name','rootSystem', 'source',
'sectorGicsLevel1', 'salesTrader.name', 'tradedPrice', …Run Code Online (Sandbox Code Playgroud) 我遇到错误,不知道为什么:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.STANDARD", line 394
ORA-06512: at "DOMINOS.DISTANCE", line 10
ORA-06512: at "DOMINOS.ZOEKWINKELVOORADRES", line 19
ORA-06512: at line 5
Run Code Online (Sandbox Code Playgroud)
光标应包含145行。当我执行该过程时,我在54行之后收到上面的错误消息。
create or replace procedure zoekWinkelVoorAdres
(v_postcode in postcode.postcode%type,
v_huisnr in WINKEL.HUISNR%type,
v_id out WINKEL.ID%type,
v_afstand out number)
is
type lat_array is varray(100000) of POSTCODE.LAT%type;
type lon_array is varray(100000) of POSTCODE.LON%type;
type id_array is varray(100000) of winkel.id%type;
a_lat lat_array;
a_lon lon_array;
a_id id_array;
latwin postcode.lat%type;
lonwin postcode.lon%type;
latklant postcode.lat%type;
lonklant postcode.lon%type;
vafstand number(38);
cursor …Run Code Online (Sandbox Code Playgroud) 我有这个匿名 PL/SQL 块,它计算并打印从表中返回的值。
DECLARE
U_ID NUMBER :=39;
RETAIL BINARY_FLOAT:=1;
FLAG NUMBER;
BEGIN
SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID INTO RETAIL, FLAG FROM UNITS WHERE UNIT_ID=U_ID;
LOOP
SELECT NVL(MAX(UNIT_ID),U_ID) INTO FLAG FROM UNITS WHERE FATHER_ID=FLAG;
IF FLAG=U_ID THEN EXIT; END IF;
SELECT RETAIL* RETAIL_AMOUNT INTO RETAIL FROM UNITS WHERE UNIT_ID=FLAG;
EXIT WHEN FLAG=U_ID;
END LOOP;
DBMS_OUTPUT.PUT_LINE( RETAIL);
END;
Run Code Online (Sandbox Code Playgroud)
这个块工作正常,但我想使用 PL/SQL 函数做同样的事情
我写的函数如下:
CREATE OR REPLACE FUNCTION GET_UNIT_RETAIL(U_ID NUMBER)
RETURN NUMBER
IS
RETAIL BINARY_FLOAT:=1;
FLAG NUMBER;
BEGIN
SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID
INTO RETAIL, FLAG
FROM UNITS
WHERE UNIT_ID=U_ID; …Run Code Online (Sandbox Code Playgroud) 朋友们,
我是DB的新手,我需要一些帮助/信息.我们的项目中有一个表"record_table",其中的值是使用C++代码插入的.
该表有多列,其中三列表示例如."serialNo,type,sub_type"C++代码为这些列的组合插入重复值(这些列不是该表的唯一或主要列).但是3列的组合应该是唯一的.
现在我们要确保不应插入此组合的重复项.我正在考虑为这些列添加唯一约束,以便在插入具有这些重复值的新记录时,它将不允许.
我认为这应该可行,但我怀疑它是否会达到性能,C++二进制文件每天运行并且它会插入大约200万条记录.将创建独特的约束命中性能.(意味着运行时间会减慢,或者因为表有数百万条记录将创建唯一约束,因为它必须对这些列进行哈希等)
如果可以,请建议.
我需要根据数据之间的任何单词进行搜索。如何在存储过程中为此传递参数?
where like employeename concat(empname,'%')
Run Code Online (Sandbox Code Playgroud)
不起作用
它只会得到开始的emp名称...