我需要创建一个在影子表中写入更改的触发器.我知道如何创建触发器但我的挑战是我需要新表中的记录即使在回滚后仍然存在.
这是输出结果的示例
INSERT INTO department VALUES (95, 'PURCHASING', 'CHICAGO');<br>
ROLLBACK;
1 rows inserted.
rollback complete.
SELECT * FROM department_log;
DEPARTMENT_ID DEPARTMENT_NAME ADDRESS OPERATION_TIME
---------------------- -------------------- -------------------- ------------------
90 HR CHICAGO 03-NOV-11
95 PURCHASING CHICAGO 03-NOV-11
SELECT * from department WHERE department_id >= 90;
DEPARTMENT_ID DEPARTMENT_NAME ADDRESS
---------------------- -------------------- --------------------
90 HR CHICAGO
Run Code Online (Sandbox Code Playgroud) 我正在努力创造一个每个圣诞节都会运行某个程序的工作.这是我走了多远:
declare
jobno number;
begin
dbms_job.submit( jobno,
'BEGIN GiveCoins; END;',
to_date('12/25', 'MM/DD'),
'sysdate + ?');
end;
/
Run Code Online (Sandbox Code Playgroud)
然而,我似乎无法找到一个简单的方法来改变每年的间隔,我只是一般很困惑如何去做这个,任何帮助非常感谢
我正在尝试将表格数据从开发框db复制到uat db,它们是2个不同的数据库.我正在尝试toad.All连接细节是正确的,但它不工作,并抛出以下错误.
[错误]执行(12:1):ORA-00900:无效的SQL语句
这就是我想要的
copy from abc/cde@//abc.abc.com:1521/devbox to abc/cde@//abc.abc.com/uatbox
INSERT TOOL_SERVICE_MAPPING (*)
USING (SELECT * FROM TOOL_SERVICE_MAPPING)
Run Code Online (Sandbox Code Playgroud) 非常简化,我有一列数字和一列日期.我想生成一行,将基于一个日期的数字合并为一列,将另一个日期合并为另一列.
数据看起来像这样 -
date number
201111 500
201111 500
201111 500
201109 500
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样 -
sum1 sum 2
1500 500
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码:
SELECT SUM(A1.COL1),SUM(A2.COL1)
FROM TAB1 A1,TAB1 A2
WHERE A1.DATE = '201111'
AND A2.DATE = '201109'
Run Code Online (Sandbox Code Playgroud)
我得到的结果是 -
sum1 sum2
1000 1500
Run Code Online (Sandbox Code Playgroud)
基本上,它并不是总和sum1的总和(应该是1500但是返回1000)并且它总和sum2太多(应该是500但是返回1500).
我试图用批量插入或其他更有效的方法解决这段代码,但我没有想法.你会怎么解决这个问题.而不是循环这么多次我想在几次调用中更有效.请告诉我你会怎么做?尽可能使用代码!感谢名单
LOOP
-- Fetch a row
IF DBMS_SQL.FETCH_ROWS(cursor_handle) > 0 THEN
DBMS_SQL.column_value(cursor_handle, 9, cont_id);
DBMS_SQL.COLUMN_VALUE(cursor_handle, 3, proj_nr);
HTP.BOLD('ContractID: ' || cont_id || ' ProjectNR: ' || proj_nr);
HTP.BR;
ELSE
EXIT;
END IF;
-- delete the old list before saving a new one
IF sek_nr = 1 THEN
EXECUTE IMMEDIATE 'DELETE FROM W_Contracts WHERE user_id = :n' USING CURRENTUSER;
END IF;
EXECUTE IMMEDIATE 'Insert into W_Contracts values(''' || currentUser || ''', '
|| sek_nr || ', sysdate, ' || cont_id || …Run Code Online (Sandbox Code Playgroud) 我正在尝试向查询添加数字通配符以查找特定位置的数字.查询看起来像这样:
SELECT SUBMITTER
FROM BASE_ELEMENT
WHERE SUBMITTER LIKE 'm_%';
Run Code Online (Sandbox Code Playgroud)
这个查询的问题在于它拾取以"m"开头并且在第二个位置有一个字符的所有内容.我需要一些像Unix通配符一样工作的东西:
'm[0-9]*'
Run Code Online (Sandbox Code Playgroud)
我希望它包括m0,m1,m2等,但不包括ma,mb,mc等.
我如何在Oracle 10g中实现这一目标?
有没有人知道是否可以配置Oracle会话或连接,以便持久保存的每个字符串都自动大写?
例如,如果我调用这样的SQL:"INSERT INTO STUDENT(name)VALUES('john doe')"
我表中的信息将保持如下:
STUDENT
--------------------
ID | 1
NAME | JOHN DOE
Run Code Online (Sandbox Code Playgroud)
我已经检查了这个条目,但找不到这样的东西:http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch3globenv.htm#sthref186
谢谢!
<?php
// This leaves the db connection in $conng require_once('/tms/http/html_docs/tease/csp/csp_tease.php');
/* This a logging function. When called with:
*/
function log_tkt_to_db($tkt_number, $date, $uid, $description, $conng)
{
echo "$tkt_number|$date|$uid|$description<br>";
$sqlinsert = "insert into TEASE_TKTLOGS VALUES ( \"$tkt_number\", \"$date\", \"$description\", \"$uid\")";
echo $sqlinsert . "<br>";
$insert = OCIParse($conng, $sqlinsert);
// OCIExecute($insert, OCI_COMMIT_ON_SUCCESS);
OCIExecute($insert);
}
log_tkt_to_db("00000000", "07/13/2012", "jt898u", "this a test, this is only a test", $conng);
?>
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
00000000|07/13/2012|jt898u|this a test, this is only a test
insert into TEASE_TKTLOGS (TICKET, DATE_TIME, CHANGE_DESC, …Run Code Online (Sandbox Code Playgroud) 在我的 select 语句中,一列包含下划线字符_。我想用空格替换下划线。例如,如果结果集列包含CLOSING_COMPANY,则结果应为CLOSING COMPANY
我刚开始学习PL/SQL,我不知道如何创建一个过程.逻辑似乎是对的,但我认为第一行有一些语法错误.这是我的代码: -
CREATE OR REPLACE PROCEDURE ReverseOf(input IN varchar2(50)) IS
DECLARE
reverse varchar2(50);
BEGIN
FOR i in reverse 1..length(input) LOOP
reverse := reverse||''||substr(input, i, 1);
END LOOP;
dbms_output.put_line(reverse);
END;
/
Run Code Online (Sandbox Code Playgroud)