我有一个这样的表:
是否可以根据否返回通过或失败的规则数?
谢谢,T
我是数据库新手,我知道这是一个简单的问题,但我无法在任何地方找到答案,所以我感谢您的帮助。
我有两张表,每张表都有相同的结构。
Table1
CaseNum Number(9,0)
CaseStat Number(5,0)
OpenDate Date
Table2
CaseNum Number(9,0)
CaseStat Number(5,0)
OpenDate Date
然后我尝试创建这个触发器,每次插入或更新 table1 时,它将在 table2 中插入一个新行。重点是让 Table2 成为 table1 的更改历史:
CREATE OR REPLACE TRIGGER TABLE1_HIST
AFTER INSERT OR UPDATE ON TABLE1
FOR EACH ROW
BEGIN
INSERT INTO TABLE2
VALUES (CaseNum, CaseStat, sysdate);
END;
当我尝试创建它时,出现以下错误:
Error(2,3): PL/SQL: SQL Statement ignored
Error(3,20): PL/SQL: ORA-00984: column not allowed here
但我已经检查并重新检查了列类型,在我看来它们都是相同的。
问题是,当我替换 VALUES (CaseNum, CaseStat, sysdate); 使用硬编码数字,它允许我创建触发器!
这有效:
CREATE OR REPLACE TRIGGER TABLE1_HIST
AFTER INSERT OR UPDATE ON TABLE1
FOR EACH ROW
BEGIN
INSERT INTO TABLE2
VALUES (123456789, 12345, sysdate);
END;
然而,这显然没有什么用处。
任何建议都值得赞赏。
由于某种原因,我无法与我创建的任何用户连接。他们的帐户状态也已解锁。
我想提一件事;pdb 是主 pdb 的克隆。(如下面他们的名字所示)。仅添加此信息以获取更多信息。
//编辑:我正在测试,我发现普通用户能够进行身份验证/连接。不知道为什么本地用户无法连接/
[oracle@oracle pdb1]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Sep 5 19:44:16 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
5 PDB3 READ WRITE NO
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL> create user test1 identified by test1;
User created.
SQL> GRANT CREATE SESSION TO test1;
Grant succeeded.
SQL> connect test1/test1;
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL> select name from v$database;
NAME
---------
ORCLDB
SQL> ALTER SESSION SET CONTAINER = PDB2;
Session altered.
SQL> select name from v$database;
NAME
---------
ORCLDB
// 新编辑 - 监听器状态 -
SQL> !lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 06-SEP-2023 17:14:56
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 06-SEP-2023 17:14:18
Uptime 0 days 0 hr. 0 min. 38 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=oracle)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/product/19.0.0/db_1/admin/orcldb/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "0053f52b9a9509e9e06562aa88e317a6" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "005414da85570a0ae06562aa88e317a6" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "fa038b2801752bdae05562aa88e317a6" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcldb" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "pdb2" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "pdb3" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
我们正在测试 Oracle OCI DBCS,并且我启用了自动备份。我发现自从启用自动备份以来,存档日志一直在累积,我想知道OCI是否也会自动删除存档日志?
问候
我们有如下表。
CREATE TABLE "STYLES" (
"STYLE_CODE" CHAR(8) GENERATED ALWAYS AS
("COLOR"||"FEATURE"||"SIZE"||"YEAR")
VIRTUAL NOT NULL ENABLE,
"COLOR" CHAR(2),
"FEATURE" CHAR(2),
"SIZE" CHAR(2),
"YEAR" CHAR(2),
"SEQ" CHAR(2),
CONSTRAINT "STYLE_CODE_PK" PRIMARY KEY
("STYLE_CODE") USING INDEX ENABLE
) ;
如果上表中STYLE_CODE PK的值不重复,则生成的SEQ值始终为00
如果STYLE_CODE PK的值重复,我们希望SEQ值按01、02的顺序增加。
我想找到解决办法。谢谢。
使用此查询:
SELECT
A.CACHE_BUFFER_TOTAL,
B.CACHE_BUFFER_USED,
A.CACHE_BUFFER_TOTAL - B.CACHE_BUFFER_USED AS CACHE_BUFFER_FREE
FROM
(SELECT BYTES / 1024 / 1024 AS CACHE_BUFFER_TOTAL FROM V$SGAINFO WHERE NAME = 'Buffer Cache Size') A,
(SELECT (SELECT COUNT(*) FROM V$BH) * (SELECT BLOCK_SIZE FROM V$BUFFER_POOL) / 1024 / 1024 AS CACHE_BUFFER_USED FROM DUAL) B;
...我可以确定缓冲区高速缓存的总大小和已使用的总大小;但是,我想知道每个用户的查询占用了多少缓冲区缓存。
在 Oracle 21C 中是否有一种简单的方法可以实现这一点?
Oracle 数据库管理员是否可以直接更改行中包含的数据,例如通过在数据库单元中键入或执行更新查询将 50 更改为 500?如果可以,如何限制数据变更只能通过ERP应用输入?
我们的 Oracle Scheduler 无法在某些环境中工作,但在某些环境中可以工作。在它工作的环境中,以下查询返回 1 行
select program from v$session where osuser = 'oracle' and program like '%(CJQ0)%';
[email protected] (CJQ0)
在它不工作的环境中,不会返回任何行。
这是我执行的测试,以查看调度程序是否正在运行。它应该立即启动该作业。
CREATE TABLE MySchema.TEMP_DBMS_JOB (
A NUMBER(*, 0))
DECLARE
l_jobid int;
BEGIN
dbms_job.submit(job => l_jobid, what => 'begin insert into MySchema.temp_dbms_job (a) values (13); commit; end;');
dbms_output.put_line(l_jobid);
COMMIT;
END;
DBA 可以做什么来让调度程序运行?“CJQ0”会话查询是否可以帮助您识别问题的潜在根源?DBA 认为调度程序的配置没有问题。
我们还尝试使用 DBMS_SCHEDULER.create_job 来提交作业,而不是已弃用的 dbms_job.submit,并且在相同的环境中获得了完全相同的结果。
我计划在这个问题达到所需的足够年龄后立即提供 3000 点赏金。如果在此之前有答案导致解决方案,我仍然会提供要点。
CREATE TABLE "HOTEL3"
( "NAMEX" VARCHAR2(4000 CHAR),
"CITY" VARCHAR2(4000 CHAR),
"PRICE" NUMBER,
"ID" VARCHAR2(50 BYTE) DEFAULT sys_guid()
);
CREATE INDEX "IDX_HOTEL3_CITY_NAME" ON "HOTEL3" ("CITY" ASC, "NAMEX" DESC);
SELECT *
FROM all_ind_columns ic
WHERE ic.index_owner = 'FOO'
AND ic.table_name = 'HOTEL3'
ORDER BY ic.column_position;
我得到以下结果(csv)
"INDEX_OWNER","INDEX_NAME","TABLE_OWNER","TABLE_NAME","COLUMN_NAME","COLUMN_POSITION","COLUMN_LENGTH","CHAR_LENGTH","DESCEND","COLLATED_COLUMN_ID"
"FOO","IDX_HOTEL3_CITY_NAME","FOO","HOTEL3","CITY",1,4000,4000,"ASC",
"FOO","IDX_HOTEL3_CITY_NAME","FOO","HOTEL3","SYS_NC00005$",2,2000,0,"DESC",
观察第二条记录;COLUMN_NAME
是SYS_NC00005$
代替NAMEX
.
以下是一些旁注。在第 1 步之后,如果您查询,all_tab_cols
您将获得所有 4 列。但是,在步骤 #2 之后,all_tab_cols
现在有一个附加条目 - 与上面的查询结果显示的名称相同。这可能有些牵强;但ID
已设置的字段DEFAULT
可能就是为什么在步骤 #2 之后all_tab_cols
有那个奇怪的条目。
那么我可以发出什么查询来获取正确的索引信息呢?
PS:我猜oracle服务器是19c。
Windows 上的 Oracle 19c。RMAN 计划备份转到此处的 FRA:D:\oracle\recovery。我在 D:\backup\ 中有另一个备份,我想恢复它。我需要能够“告诉”Rman 查看非默认位置。这是我到目前为止所拥有的:
shutdown immediate;
startup nomount;
show parameter control_files;
exit;
rman target /
restore controlfile from 'D:\BACKUP\';
alter database mount;
-- full recovery
run{
restore database;
recover database;
alter database open resetlogs;
}
在哪一点上我指定备份位置以及如何指定?