天道酬勤,学无止境

oracle

Oracle 死锁在同一条记录上不断重复(Oracle deadlock keeps repeating on the same record)

问题 我有以下查询的问题: SELECT o.OID, o.DOSSIER_KEY, o.DOSSIER_TYPE FROM TVM04_VMAX_TEMP_RIGHTS WHERE o.DOSSIER_KEY = ? AND o.DOSSIER_TYPE = ? FOR UPDATE 即使以不同的时间间隔重复多次,它也会导致死锁。 如果我了解死锁是如何发生的,我希望两个冲突会话中的一个会回滚,另一个会继续(这里) 我确实得到了一个内部异常:java.sql.SQLException:ORA-00060:在等待资源时检测到死锁,但是在我们的系统上另一个 tx 再次访问相同记录的可能性,每次我也手动运行查询时,似乎对我来说接近于 0。 这是我的转储 Oracle 文件: Deadlock graph: ---------Blocker(s)-------- ---------Waiter(s)--------- Resource Name process session holds waits process session holds waits TX-00400007-008c00ec 304 786 X 300 757 X TX-00070016-0002dae6 300 757 X 304 786 X session 786: DID 0001-0130-011DAD37

2021-09-20 04:12:45    分类:技术分享    oracle   jpa   deadlock

Oracle ADF:ADFC-10001:无法实例化类“com.wip.view.backing.Index”(Oracle ADF: ADFC-10001: cannot instantiate class 'com.wip.view.backing.Index')

问题 我使用 Oracle ADF Essentials 开发了一个 Web 应用程序。 我可以在本地系统的 tomcat 6.x 上运行这个应用程序。 我的服务器上有相同的 tomcat 6.x 环境。 一切都一样(tomcat环境)。 但是,当我尝试在服务器环境中运行此应用程序时,出现以下错误。 HTTP Status 500 - oracle.adf.controller.ControllerException: ADFC-10001: cannot instantiate class 'com.wip.view.backing.Index' type Exception report message oracle.adf.controller.ControllerException: ADFC-10001: cannot instantiate class 'com.wip.view.backing.Index' description The server encountered an internal error that prevented it from fulfilling this request. exception javax.servlet.ServletException: oracle.adf.controller

2021-09-20 04:10:29    分类:技术分享    java   oracle   tomcat   oracle-adf   jdeveloper

sql oracle忽略假期(sql oracle ignore holidays)

问题 我正在使用此代码来计算两个日期之间的差异,忽略周末: SELECT To_date(SYSDATE) - To_date('01.07.2014', 'DD.MM.YYYY') - 2 * ( TRUNC(Next_day(To_date(SYSDATE) - 1, 'FRI')) - TRUNC( Next_day(To_date('01.07.2014' , 'DD.MM.YYYY') - 1, 'FRI')) ) / 7 AS DAYS_BETWEEN FROM dual 我有另一个名为 table1 的表,其中存在列“日期”(其类型为“日期”),其中记录了假期的所有日期。 示例表 1: DATES 12.06.2011 19.06.2014 09.05.2013 ... 我试图让我的代码检查这个表,如果一个日期在上面的两个日期之间,它会在输出中生成 -1 天。 回答1 如果你把它分成以下任务应该很容易: 使用Row Generator方法生成两个给定日期之间的所有日期,如下所示。 忽略周末的日期,即星期六和星期日检查范围内的日期在假日表中是否有任何匹配。 以下行生成器查询将为您提供工作日的总数,即不包括星期六和星期日: SQL> WITH dates AS 2 (SELECT to_date('01/01/2014', 'DD/MM/YYYY') date1, 3

2021-09-20 03:57:11    分类:技术分享    sql   oracle   date   oracle-sqldeveloper   weekend

如何通过 Oracle 表单生成器创建文件夹?(How can I create a folder via Oracle form builder?)

问题 我想知道如何通过 Oracle 表单生成器创建文件夹? 是否有可能? 我的意思是我想动态创建一个文件夹,然后使用 Internet Explorer 打开它,以便客户轻松复制他的文件。 我正在使用oracle 6i。 回答1 在客户端/服务器中运行的 Forms 6i 中,您可以像这样使用 HOST 命令: HOST('md c:\somefolder\newfolder'); 在以后的基于 Web 的表单版本中,您将使用 CLIENT_HOST 而不是 HOST。

2021-09-20 02:45:22    分类:技术分享    oracle   oracleforms

将连接数据添加到查询结果中(Adding in joined data to a query result)

问题 这可能已经在这里,但可以理解很难搜索。 基本上,我有一个带有 CompanyID 的主表 Companies。 我必须连接到它的表 - 用户和承包商。 一家公司可能有多个用户,也可能有多个承包商。 但是用户和承包商之间没有任何关系。 我想要的是拥有一个公司所有用户和所有承包商的列表,如下所示: Company1 User1 Contractor1 Company1 User2 Contractor2 Company2 User3 Contractor1 Company2 User4 NULL Company3 User5 Contractor2 Company3 NULL Contractor3 等等。上图中,Company1 有两个用户和两个承包商,Company2 有两个用户和一个承包商,Company3 有一个用户和两个承包商。 我不知道是否可以在纯单个 SQL 查询中重新创建。 如果我使用 PHP,那会很容易 - 我只需将其全部拉入一个数组并创建子数组。 但是我正在尝试在 Logi Info 中执行此操作,虽然到目前为止我还无法弄清楚如何在 Logi 的对象中执行此操作,但我希望也许我可以直接在 SQL 中执行此操作。 这可能吗? 联接通常包括难以清除的重复项; 例如,对于 Company1,它将有四行:User1-Contractor1、User1

2021-09-20 02:25:19    分类:技术分享    sql   oracle

存储过程 SQL 执行计划(Stored procedure SQL execution plan)

问题 我对执行速度非常慢的存储过程感到有些困惑。 存储过程基本上包含一个使用传入参数 (in_id) 的查询,并放置在一个游标中,如下所示: open tmp_cursor for select col1, col2, col3 from table1 tab where ((in_id is null) or (tab.id = in_id)); -- tab.id is the PK 当我使用预定义的值单独获取 SQL 查询的执行计划时,我会通过使用索引的查询获得良好的结果。 但是,当我从我的应用程序调用该过程时,我看到没有使用索引并且表进行了完整扫描,从而导致性能下降。 如果我删除 WHERE 子句“(in_id is null)”的第一部分,应用程序的性能又会很快。 为什么在我的应用程序调用期间没有使用索引(传入 in_id)? 回答1 假设in_id是一个查询参数 - 而不是列名: 无论输入如何,查询都必须只有一个 exec 计划。 因此,如果您将参数in_id作为 NULL 传递,则它应该返回所有行。 如果传递非 NULL in_id则应该只返回一个 PK 值。 所以 Oracle 选择了“最坏可能”的 exec。 计划处理“最坏可能”的情况。 “通用”查询是通往地狱的道路。 只需将查询一分为二。 select col1, col2, col3 from table1

2021-09-20 02:14:43    分类:技术分享    sql   oracle   sql-execution-plan

如何使用 select SQL 语句 (Oracle DBMS) 生成两个数据集的“合并”?(How to produce “merge” of two data sets with select SQL statement (Oracle DBMS)?)

问题 什么是插入 SQL 语句来合并两个表中的数据。 例如,我有 events_source_1 表(列:event_type_id、event_date)和 events_source_2 表(相同列)和 events_target 表(列:event_type_id、past_event_date nullalbe、future_event_date nullable)。 Events_source_1 有过去的事件,Events_source_2 有未来的事件,结果 events_target 将包含相同 event_type_id 的同一行中的过去和未来事件。 如果没有过去事件但有未来事件,那么过去事件日期不会被设置,只有未来事件日期会被设置,反之亦然。 非常感谢您帮助我解决这个问题。 回答1 Roman,您需要对您的选择进行完整的外部联接,以便对于任何给定的事件类型 ID(我假设您在过去和将来的表中都有 0 或 1 行用于任何特定的事件类型 ID),您将输出一行,以及适当的空日期和非空日期。 第一个答案不会将来自两个来源的日期合并为一行,我相信这是您要求的。 第二个答案更接近,但由于内部联接,它仅适用于具有过去和未来日期的行(即:每个表中有一个)。 例子: insert into event_target (event_type_id, past_event_date

2021-09-20 02:05:36    分类:技术分享    oracle   insert   sql

如何列出数据库链接 (Oracle) 中存在的所有表?(How can I list all tables existent in a Database Link (Oracle)?)

问题 基本上,我有一个名为mylink.domain的数据库链接(Oracle),在此链接中,我们可以访问基础信息,例如成员名称和其他一般信息。 我想在此链接中列出所有表的名称,但我不知道该怎么做。 提前致谢 回答1 您可以通过 dblink 访问 all_tables 视图: select owner, table_name from all_tables@dblink order by owner, table_name; 回答2 选择 ALL_TABLES 字典视图的内容将列出您的用户有权访问的所有表。 通常,并不总是可以获得您没有权限的表的列表 - 它们只是不显示。 如果您的用户具有 SELECT ANY DICTIONARY 权限,您可以选择 DBA_TABLES 的内容,它将始终列出数据库中存在的所有表。 回答3 从 all_tables@dblinkname 中选择 table_name; 这将显示您的链接用户有权访问的所有表。 我从哪里得到答案

2021-09-19 23:59:31    分类:技术分享    sql   database   oracle

SQL 查询“00904. 00000 - “%s: 无效标识符”(SQL Queries “00904. 00000 - ”%s: invalid identifier")

问题 嗨,我有以下代码 SELECT entertainer_id, entertainer_groupname FROM casestudy_entertainer INNER JOIN casestudy_availability ON casestudy_entertainer.entertainer_id = CASESTUDY_AVAILABILITY.AVAILABILITY_ENTERTAINERID INNER JOIN casestudy_calendardates ON CASESTUDY_AVAILABILITY.AVAILIBILITY_CALENDARDATEID = casestudy_calendardates.calendar_Id WHERE entertainer_type = '&Entertainer_TYPE' AND casestudy_calendardates.calendar_date = '&Event_date' 当我运行它时,我似乎无法弄清楚它不喜欢什么。 它给了我以下错误 ORA-00904: "CASESTUDY_AVAILIBILITY"."AVAILIBILITY_CALENDARDATEID": 无效标识符 00904。00000 - "%s: 无效标识符" *原因: *操作:错误在行:7 列:4

2021-09-19 23:31:37    分类:技术分享    sql   oracle

避免 ORA-00955: 名称已被现有对象使用(Avoiding ORA-00955: name is already used by an existing object)

问题 我正在sql文件中创建如下表,每次有新文件要处理时都会调用该表。 因此,每次有新文件出现时,我都会删除此表并重新创建并加载。 当我从 shell 脚本调用它时,该表被删除并成功创建,但与此同时我收到如下错误。 任何想法如何避免这种情况。 ERROR at line 1: ORA-00955: name is already used by an existing object 删除表并创建 sql 文件: DROP TABLE SCHEMA.TEMP_SOURCE; CREATE TABLE SCHEMA.TEMP_SOURCE( COL 1 VARCHAR2(30 CHAR), COL 2 VARCHAR2(30 CHAR), COL 3 VARCHAR2(30 CHAR), ); / EXIT; 回答1 ORA-00955: 名称已被现有对象使用 那是因为,您在脚本末尾添加了斜杠/ 。 ); / 因此,缓冲区中的前一条语句将再次执行。 这意味着, CREATE TABLE 语句被执行两次。 去掉末尾的斜线。 分号足以作为单个查询的语句终止符。 这就是我会做的: SQL> BEGIN 2 EXECUTE IMMEDIATE 'DROP TABLE TEMP_SOURCE'; 3 EXCEPTION 4 WHEN OTHERS THEN 5 IF SQLCODE !=

2021-09-19 23:11:31    分类:技术分享    sql   oracle