我有一个简单的查询:
WITH xtbl AS (
SELECT XMLTYPE ('<a><b>1</b></a>') AS xcol
FROM DUAL
)
SELECT XMLQUERY ('copy $tmp := .
modify
insert node <c>2</c>
into $tmp/a/b
return $tmp'
PASSING xcol
RETURNING CONTENT) AS newxcol
FROM xtbl;
Run Code Online (Sandbox Code Playgroud)
我想要做的是在节点内插入一个节点<c>,但Oracle 12c抛出了这个错误:<b><a>
ORA-19114: XPST0003 - error during parsing the XQuery expression:
LPX-00801: XQuery syntax error at 'EOF'
5 -
- ^
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
NEWXCOL
-------------
<a>
<b>1</b>
<c>2</c/>
</a>
Run Code Online (Sandbox Code Playgroud)
我已经尝试在Oracle Docs中寻找替换appendChildXML并遵循该示例但只得到了错误.
我知道这是非常基本的,我错过了一些明显的东西.请帮忙.
无法DBMS_SCHEDULER通过删除END_DATE
大家好!我正在使用oracle 12cR1,现在DBMS_SCHEDULER作业有问题。
首先,我DBMS_SCHEDULER用END_DATEset 创建了一个重复的oracle 作业,在set之后END_DATE,作业成功完成,并且job的启用状态自动更改为Disabled。根据作业的运行日志,“操作”为COMPLETED,而“附加信息REASON="End time reached"
”为预期值。
然后我想再次运行作业,我删除了该END_DATE字段
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE('JOB_XXX', 'END_DATE', '');
Run Code Online (Sandbox Code Playgroud)
并通过以下方式设置作业启用
SYS.DBMS_SCHEDULER.ENABLE(name => 'JOB_XXX');
Run Code Online (Sandbox Code Playgroud)
我可以看到该作业已再次启用,并且END_DATE为空。但是作业再次运行一次,然后停止,运行日志为COMPLETED,而附加信息REASON="End time reached"再次运行。
BEGIN
sys.dbms_scheduler.CREATE_JOB(
JOB_NAME => 'JOB_3358',
job_type => 'STORED_PROCEDURE',
JOB_ACTION => 'TEST_JOB',
START_DATE => to_date('2019-05-05 13:35:00','yyyy-mm-dd hh24:mi:ss'),
REPEAT_INTERVAL => 'FREQ= SECONDLY;INTERVAL=30',
END_DATE => to_date('2019-05-05 13:38:00','yyyy-mm-dd hh24:mi:ss'),
auto_drop => FALSE,
COMMENTS => NULL);
END;
/
begin
sys.dbms_scheduler.enable(name => 'JOB_3358');
end;
/
Run Code Online (Sandbox Code Playgroud)
我所期望的是,该作业将 …
我们正在使用oracle 12.1.0.1.0.
我们一直通过utl_http向多个服务发出https调用,没有任何问题.多年来我们一直在这样做,我们也一直在使用它进行Facebook授权.
最近,我们在https中调用facebook.com网址时遇到了一个我们无法解决的问题.它似乎与facebook的转换在*.facebook.com上使用证书相吻合.虽然我不愿意说这是原因,但可能是相关的.为了节省您的时间,我们对网络acl授权很好,并且没有证书验证错误.
我们得到的错误代码问题是:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-28750: unknown error
ORA-06512: at "SYS.UTL_HTTP", line 1130
Run Code Online (Sandbox Code Playgroud)
发出utl_http.begin_request的pl/sql行发生错误.
我的问题是:任何人都可以复制这个问题吗?有没有人去过那里找到解决方案?任何输入都表示赞赏.
我包括两个例子:一个是对redhat.com域的调用,它工作正常.另一个是对具有上述问题的facebook.com域名的调用.在这两种情况下使用的代码都是相同的.两个域都使用*.domain上的证书.
目标页面:https://www.redhat.com/en/about
- redhat页面的证书链
GTE CyberTrus Global Root
Baltimore CyberTrust Root <=== rh_01.crt
Cybertrust Public SureServer SV CA <=== rh_02.crt
*.redhat.com
Run Code Online (Sandbox Code Playgroud)
- 钱包包含箭头标记的证书.我们不包含*.redhat.com证书,因为只有受信任的证书才能进入钱包.
- 以下是redhat.com的钱包是如何创建的.
orapki wallet create -wallet /dir1/rh -pwd walletpassword -auto_login
orapki wallet add -wallet /dir1/rh -trusted_cert -cert "/dir1/rh/rh_01.crt" -pwd walletpassword
orapki wallet add -wallet /dir1/rh -trusted_cert -cert "/dir1/rh/rh_02.crt" -pwd walletpassword …Run Code Online (Sandbox Code Playgroud) 如果我想访问RDBMS特有的功能怎么办?有没有办法将数据库特定的SQL注入到EF生成的SQL中?
例如,在Oracle 12c中,您可以为DDL和DML添加时间有效性(有很多种类;我将仅使用这里的简单示例):
这可以在C#中很好地建模:
[TemporalAxis("valid_time")]
public class SomeEntity
{
public string SomeField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后与LINQ一起使用
var results = context.SomeEntities
.Where(i => i.SomeField = "some_value")
.AsOfPeriodFor("valid_time", dateVariable);
Run Code Online (Sandbox Code Playgroud)
该.AsOfPeriodFor扩展可以是这样的:
public static class TemporalExtensions
{
public static IEnumerable<TSource> AsOfPeriodFor<TSource>(this IEnumerable<TSource> source,
string temporalAxis, DateTime asOfDate)
{
// reflect on TSource to ensure it has the correct attribute/value (else degrade/throw)
// do something to source that sets up EF to add the extra clause in the DML
return source; …Run Code Online (Sandbox Code Playgroud) 虽然我昨天给出了一个问题的答案,但我建议使用VIRTUAL COLUMN来计算值而不是手动更新它.
我自己做了一个测试,并找出了在连接两个NUMBER类型列时虚拟列表达式所占用的数据大小的问题.虽然,在连接两个字符时没有问题.
数据库版本:
SQL> select banner from v$version where rownum = 1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
SQL>
Run Code Online (Sandbox Code Playgroud)
测试用例1:连接字符串
SQL> CREATE TABLE t(
2 ID varchar2(2),
3 num varchar2(2),
4 text VARCHAR2(10) generated always as (id||'_'||num) VIRTUAL
5 );
Table created.
SQL>
SQL> INSERT INTO t(ID, num) VALUES ('a', 'e');
1 row created.
SQL> INSERT INTO t(ID, num) VALUES ('b', 'f');
1 row created. …Run Code Online (Sandbox Code Playgroud) 我在我的ubuntu中安装了oracle 12c.我通过sqldeveloper使用oracle,我可以sys使用我的密码成功连接到用户.我希望能够默认使用oracle提供的所有数据库.当我尝试使用hr与sys我相同的密码连接用户名时,我找不到错误的用户名.
select * from all_users不列出用户hr.所以我假设根本没有创建用户.
伙计们我试图在insert语句下面执行并且我一直收到错误:
无法插入生成的始终标识列
声明是:
INSERT INTO leaves_approval
SELECT *
FROM requests_temp r
WHERE r.civil_number = 33322
AND r.request_id = (SELECT Max(s.request_id)
FROM requests_temp s)
Run Code Online (Sandbox Code Playgroud) 我的oracle表中有数据,我的名字和日期范围如下:
Name From To
Lopes, Janine 07-Jun-17 16-Jul-17
Lopes, Janine 17-Jul-17 23-Jul-17
Lopes, Janine 24-Jul-17 31-Aug-17
Baptista, Maria 23-Dec-16 19-Feb-17
Deyak,Sr, Thomas 22-Jan-17 18-Apr-17
Deyak,Sr, Thomas 27-Apr-17 14-May-17
Deyak,Sr, Thomas 15-May-17 21-May-17
Deyak,Sr, Thomas 22-May-17 28-May-17
Deyak,Sr, Thomas 29-May-17 31-May-17
Serrentino, Joyce 18-Mar-17 30-Apr-17
More, Cathleen 30-Jul-17 13-Aug-17
More, Cathleen 14-Aug-17 20-Aug-17
More, Cathleen 21-Aug-17 27-Aug-17
More, Cathleen 28-Aug-17 03-Sep-17
More, Cathleen 04-Sep-17 10-Sep-17
More, Cathleen 11-Sep-17 24-Sep-17
Barrows, Michael 30-Jan-17 19-Mar-17
Barrows, Michael 20-Mar-17 26-Mar-17
Barrows, Michael 27-Mar-17 02-Apr-17 …Run Code Online (Sandbox Code Playgroud) 背景:ALL_IND_EXPRESSIONS有专栏
Run Code Online (Sandbox Code Playgroud)COLUMN_EXPRESSION LONG Function-based index expression defining the column
我知道这LONG已被弃用了.我需要编写类似的东西(或做其他文本操作):
SELECT
REPLACE(REPLACE(REPLACE(
q'{ALTER INDEX "<index_owner>"."<index_name>" ON ... (<column_expression>)}'
,'<index_owner>', index_owner )
,'<index_name>', index_name)
,'<column_expression>', column_expression) AS result
FROM all_ind_expressions;
Run Code Online (Sandbox Code Playgroud)
ORA-00932:不一致的数据类型:预期NUMBER变长
备注:
PL/SQL blockDBMS_METADATA.GET_DDL (事实并非如此)是否有可能从投/转换/使用内置函数LONG来VARCHAR2?
EDIT TL; DR:
SELECT column_expression || 'a' -- convert to working code
FROM all_ind_expressions;
Run Code Online (Sandbox Code Playgroud) 到目前为止,任何列名超过 30 个字符的表在查询 V$LOGMNR_CONTENTS 时都会给出 UNSUPPORTED 操作
如果我删除该列或将大小调整为 <=30,则所有 CRUD 操作都会报告正常。
在 Oracle 12.2 中支持 128 个字符对象,所以我试图了解我是否配置错误。无休止的谷歌搜索让我一无所获,Oracle 文档也没有。
提前致谢!
编辑
刚刚检查了 19c,同样的行为。兼容性设置为 19.0.0
编辑
关于使用补充日志记录的评论很多,但无法创建与接受的答案相同的场景。
无论哪种方式,鉴于 Oracle 现在已经表示永远不会支持它,这并不重要!
测试我跑到它仍然无法工作的地方
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT supplemental_log_data_min, supplemental_log_data_pk
FROM V$Database;
SUPPLEME SUP
-------- ---
YES NO
CREATE TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" (
"ID" NUMBER(10,0),
"NAME" VARCHAR2(254 BYTE)
);
ALTER TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" MODIFY ("ID" NOT NULL ENABLE);
ALTER TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" MODIFY ("NAME" NOT NULL ENABLE);
INSERT INTO atablewithquitealongnamelikeverylongactually VALUES (1, 'My Name');
DECLARE …Run Code Online (Sandbox Code Playgroud)