标签: oracle12c

在XMLTYPE列中插入子节点

我有一个简单的查询:

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并遵循该示例但只得到了错误.

我知道这是非常基本的,我错过了一些明显的东西.请帮忙.

sql oracle xquery xmltype oracle12c

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

无法再次运行已完成的Oracle作业

无法DBMS_SCHEDULER通过删除END_DATE

大家好!我正在使用oracle 12cR1,现在DBMS_SCHEDULER作业有问题。

首先,我DBMS_SCHEDULEREND_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 dbms-scheduler oracle12c

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

使用通配符证书从oracle utl_http调用https://www.facebook.com

我们正在使用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)

ssl plsql facebook oracle12c

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

泄漏实体框架的抽象 - 只是一点点

如果我想访问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)

c# linq entity-framework-6 oracle12c

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

连接虚拟列表达式中的数字会引发ORA-12899:值对于列来说太大

虽然我昨天给出了一个问题的答案,但我建议使用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)

oracle numbers sqldatatypes oracle12c virtual-column

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

Oracle 12c中没有usename HR

我在我的ubuntu中安装了oracle 12c.我通过sqldeveloper使用oracle,我可以sys使用我的密码成功连接到用户.我希望能够默认使用oracle提供的所有数据库.当我尝试使用hrsys我相同的密码连接用户名时,我找不到错误的用户名.

select * from all_users不列出用户hr.所以我假设根本没有创建用户.

  • 如果它默认不可用,hr用户?
  • 如何配置以便我可以访问所有`hr`数据库?

oracle oracle12c

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

ORA-32795:无法插入生成的始终标识列

伙计们我试图在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)

sql oracle identity-column oracle12c

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

按名称和日期范围对数据进行分组

我的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)

sql database oracle oracle12c

8
推荐指数
2
解决办法
285
查看次数

如何将LONG转换为内联的VARCHAR2

背景:ALL_IND_EXPRESSIONS有专栏

COLUMN_EXPRESSION   LONG   Function-based index expression defining the column
Run Code Online (Sandbox Code Playgroud)

我知道这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变长

DBFiddle演示

备注:

  • 它必须是自包含的查询
  • 没有中间对象(创建表/视图不是一个选项).
  • 没有 PL/SQL block
  • DBMS_METADATA.GET_DDL (事实并非如此)
  • WITH FUNCTION子句作为最后的手段

是否有可能从投/转换/使用内置函数LONGVARCHAR2

EDIT TL; DR:

SELECT column_expression || 'a'  -- convert to working code
FROM all_ind_expressions;
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle12c

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

在 Oracle 12c R2 中,LogMiner 是否支持长度超过 30 个字符的表/列名称?

到目前为止,任何列名超过 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)

oracle oracle12c logminer

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