小编Viv*_*vek的帖子

在匹配行(grep)之前显示文件名

如何grep在输出中的匹配行之前显示文件名?

unix grep

262
推荐指数
4
解决办法
32万
查看次数

在VARCHAR字段中使用MAX()

我有一个包含以下数据集的表

ID (VARCHAR2 field)
D001
D002
D010
D0012
Run Code Online (Sandbox Code Playgroud)

max()在这个领域使用.

Select max(ID) from <table-name>;
Run Code Online (Sandbox Code Playgroud)

它返回D010结果.

为什么结果不是D0012

sorting string oracle

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

ORA-29283:文件操作无效ORA-06512:在"SYS.UTL_FILE",第536行

下面是我用来从表格中提取数据到平面文件的代码.

BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;
Run Code Online (Sandbox Code Playgroud)

这段代码在我们的开发数据库中工作正常,但是如果我在新的数据库中执行它会抛出以下错误.

Error starting at line 1 in command:
    BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Error report:
ORA-29283: invalid file …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g ora-06512

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

存储过程未返回正确的结果

我有这样的存储过程

CREATE OR REPLACE PROCEDURE schema_name.CHECKS
IS
   tbl_name        VARCHAR2 (50);
   constraint_nm   VARCHAR2 (100);
   CURSOR cur_constraint
   IS
      SELECT DISTINCT table_name, constraint_name
        FROM all_constraints
       WHERE     constraint_type = 'R'
             AND STATUS = 'ENABLED'
             AND R_OWNER = 'owner1'
             AND r_constraint_name = 'constraint1';
BEGIN
   DBMS_OUTPUT.put_line ('Constraint Name');
   OPEN cur_constraint;
   LOOP
      FETCH cur_constraint
      INTO tbl_name, constraint_nm;
      EXIT WHEN cur_constraint%NOTFOUND;
      DBMS_OUTPUT.put_line (constraint_nm||'~~'||tbl_name);
   END LOOP;
   close cur_constraint;
END CHECKS;
Run Code Online (Sandbox Code Playgroud)

我执行此过程

set serveroutput on

BEGIN
   schema_name.CHECKS ();
END;
Run Code Online (Sandbox Code Playgroud)

我得到的输出是

Procedure created.
Constraint Name
PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)

它没有返回任何结果,但理想情况下它应该返回一行(用于定义游标的select查询将返回一行).

当我像这样执行上面的代码作为PL/SQL块时 …

oracle plsql stored-procedures

6
推荐指数
2
解决办法
742
查看次数

我们可以动态指定并行度吗?

我有一个选择SQL查询,它使用并行,类似这样

INSERT/*+ APPEND PARALLEL (tst, 6) */ INTO test_table tst
                (
                    **************
                    **************
                    **************
                )
    SELECT /*+  PARALLEL (a, 6) */ DISTINCT 
                    **************
                    **************
                    **************
         FROM src_table a;
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的,我已经对程度进行了硬编码,但我不想这样做,因为在执行此代码的所有数据库中CPU的数量并不相同.

My requirement:我需要查询V$PARAMETER可用的CPU数量并使用result-2我的查询中的值.像这样......

DECLARE
   degree        varchar2(1);
BEGIN
select value-2 INTO degree from v$parameter where name='cpu_count';

            INSERT/*+ APPEND PARALLEL (tst, degree) */ INTO test_table tst
            (
                **************
                **************
                **************
            )
SELECT /*+  PARALLEL (a, degree) */ DISTINCT 
                **************
                **************
                **************
     FROM src_table a;
END;
Run Code Online (Sandbox Code Playgroud)

但是,它没有像我预期的那样工作,我看到32个并行线程,无论可用的CPU如何.这是正确的方法吗?如果没有,是否有其他解决方案符合我的要求?

sql oracle parallel-processing oracle11g

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

合并时如何避免ORA-3814错误?

我有这样的代码

MERGE INTO target_table tgt
USING source_table src
on(tgt.c1=src.c1)
WHEN MATCHED THEN
UPDATE SET tgt.c1=src.c2
Run Code Online (Sandbox Code Playgroud)

我得到ORA-38104: Columns referenced in the ON clause cannot be updated.我理解这个错误的原因.但是我们怎样才能重写这段代码呢?没有使用光标有没有可能吗?

oracle merge ora-38104

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

ORA-02070:数据库在此上下文中不支持

我有一个查询

INSERT INTO sid_rem@dev_db
(sid)
select sid from v$session
Run Code Online (Sandbox Code Playgroud)

现在,当我执行此查询时,我得到了 ORA-02070: database does not support in this context

仅当我将数据从v $ session插入某个远程数据库时才会发生此错误.它适用于任何其他表.

任何人都知道为什么这个问题和任何解决方法?

oracle dblink

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

DBMS_STATS会分析表吗?

我使用DBMS_STATS.GATHER_SCHEMA_STATS过程来收集代码中的统计信息.

BEGIN
   DBMS_STATS.gather_schema_stats
                            (ownname          => '<SCHEMA NAME',
                             estimate_percent => DBMS_STATS.auto_sample_size,
                             options          => 'GATHER STALE',
                             DEGREE           => NULL,
                             CASCADE          => DBMS_STATS.auto_cascade,
                             granularity      => 'auto'
                            );
end;
Run Code Online (Sandbox Code Playgroud)

我的问题:在我执行此代码后,我使用TOAD工具检查了表的最后分析日期,它显示了一些其他过去的日期,而不是我运行DBMS_STATS.GATHER_SCHEMA_STATS程序时的当前日期.

这是否意味着DBMS_STATS不会分析表格?

oracle toad

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

ksh中的变量间接

在如下的ksh-snippet中

iname=FA
USER_FA=xyz 
USER_CS=test
TDUSER=USER_$iname
${!TDUSER}
Run Code Online (Sandbox Code Playgroud)

${!TDUSER}没有按预期工作.为什么?

unix ksh

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

Oracle程序

create or replace function gen.sample_func(owner varchar2) return varchar2 
    as 
     data_t varchar2(10); 
      cursor cur is   select  data_type  from  SYS.DBA_TAB_COLUMNS;
      begin  
        open cur;
          dbms_output.put_line('Done'); 
        close cur; 
        return data_t;  
    end sample_func;
Run Code Online (Sandbox Code Playgroud)

在编译上面的函数时,我得到以下错误

Warning: compiled but with compilation errors
Errors for FUNCTION sample_func

LINE/COL                                                                        
--------------------------------------------------------------------------------
ERROR                                                                           
--------------------------------------------------------------------------------
4/8                                                                             
PLS-00201: identifier 'DBA_TAB_COLUMNS' must be declared                        

4/8                                                                             
PL/SQL: Item ignored                                                            

7/15                                                                            
PLS-00320: the declaration of the type of this expression is incomplete or malfo
rmed                                                                            

7/8                                                                             
PL/SQL: Statement ignored                                                       
Run Code Online (Sandbox Code Playgroud)

当我select在游标中单独执行语句时,我没有收到此错误.请帮我解决这个问题.

oracle plsql

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

了解基本的SQL查询

我有一个查询

SELECT tran_number
  FROM table_a WHERE customer_id IN
          (SELECT customer_id 
             FROM table_b
            WHERE customer_key = 89564
                  AND (   other_phn_area_code
                       || other_phnum_pfx_num
                       || other_phnum_sfx_num IN
                          (123456789)))
       AND phn_area_code || phnum_pfx_num || phnum_sfx_num IN (123456789)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常.关注的是内部查询(下面单独复制内部查询)...

(SELECT customer_id 
                 FROM table_b
                WHERE customer_key = 89564
                      AND (   other_phn_area_code
                           || other_phnum_pfx_num
                           || other_phnum_sfx_num IN
                              (123456789)))
Run Code Online (Sandbox Code Playgroud)

当我执行此查询时,我收到错误customer_id: invalid identifier.实际上,table_b没有任何字段命名customer_id.如果是这样,那么当我将它用作上面的内部查询时,它是如何工作的,没有任何问题.

请帮我理解这个.

数据库详情如下

Oracle 11G Enterprise edition 11.2.0.2.0
PL/SQL Release 11.2.0.2.0
Run Code Online (Sandbox Code Playgroud)

sql oracle subquery

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

为什么我的层次结构查询显示重复记录?

我的要求是找到一个月内所有失效的天数.以下是我的示例查询.

CREATE TABLE custom.date_full (
    sno         NUMBER,
    curr_date   DATE);

INSERT INTO custom.date_full VALUES ( 1,'27-sep-2018' );
INSERT INTO custom.date_full VALUES ( 2,'27-sep-2018' );

--Query:1 - RETURNS 4 RECORDS AS EXPECTED
 SELECT  curr_date, 
        TRUNC (curr_date, 'MM') + LEVEL - 1 AS DAY,
        LEVEL 
   FROM (SELECT * FROM custom.date_full WHERE sno=1)
CONNECT BY level<=4
  ORDER BY DAY;

--Query 2: RETURNS 15 RECORDS WITH DUPLICATES
SELECT  curr_date, 
        TRUNC (curr_date, 'MM') + LEVEL - 1 AS DAY,
        LEVEL 
   FROM custom.date_full 
  WHERE sno=1
CONNECT BY …
Run Code Online (Sandbox Code Playgroud)

sql oracle

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