小编Jus*_*ave的帖子

Oracle中的触发器以及如何在回滚后保留记录

我需要创建一个在影子表中写入更改的触发器.我知道如何创建触发器但我的挑战是我需要新表中的记录即使在回滚后仍然存在.

这是输出结果的示例

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)

oracle triggers oracle10g

2
推荐指数
1
解决办法
951
查看次数

使用DBMS_JOB在Oracle中创建作业

我正在努力创造一个每个圣诞节都会运行某个程序的工作.这是我走了多远:

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)

然而,我似乎无法找到一个简单的方法来改变每年的间隔,我只是一般很困惑如何去做这个,任何帮助非常感谢

sql oracle dbms-job

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

如何使用toad将数据从一个数据库/表复制到oracle中的另一个数据库/表

我正在尝试将表格数据从开发框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)

oracle toad

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

取一列并在一行上产生两个总和

非常简化,我有一列数字和一列日期.我想生成一行,将基于一个日期的数字合并为一列,将另一个日期合并为另一列.

数据看起来像这样 -

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).

sql oracle

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

在PLSQL中批量插入而不是循环?

我试图用批量插入或其他更有效的方法解决这段代码,但我没有想法.你会怎么解决这个问题.而不是循环这么多次我想在几次调用中更有效.请告诉我你会怎么做?尽可能使用代码!感谢名单

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)

plsql bulkinsert cursor oracle11g

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

Where子句中的数字通配符

我正在尝试向查询添加数字通配符以查找特定位置的数字.查询看起来像这样:

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中实现这一目标?

regex sql database oracle

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

是否可以将Oracle会话/连接配置为自动大写字符串?

有没有人知道是否可以配置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

谢谢!

oracle

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

Oracle-00972:标识符太长我的SQL出了什么问题?

<?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)

php sql oracle

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

从选择中删除下划线

在我的 select 语句中,一列包含下划线字符_。我想用空格替换下划线。例如,如果结果集列包含CLOSING_COMPANY,则结果应为CLOSING COMPANY

oracle select

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

在PL/SQL中反转字符串的过程

我刚开始学习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)

sql oracle plsql syntax-error

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