我有一个包含以下数据集的表
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
?
下面是我用来从表格中提取数据到平面文件的代码.
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) 我有这样的存储过程
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块时 …
我有一个选择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如何.这是正确的方法吗?如果没有,是否有其他解决方案符合我的要求?
我有这样的代码
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
.我理解这个错误的原因.但是我们怎样才能重写这段代码呢?没有使用光标有没有可能吗?
我有一个查询
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插入某个远程数据库时才会发生此错误.它适用于任何其他表.
任何人都知道为什么这个问题和任何解决方法?
我使用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不会分析表格?
在如下的ksh
-snippet中
iname=FA
USER_FA=xyz
USER_CS=test
TDUSER=USER_$iname
${!TDUSER}
Run Code Online (Sandbox Code Playgroud)
${!TDUSER}
没有按预期工作.为什么?
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
在游标中单独执行语句时,我没有收到此错误.请帮我解决这个问题.
我有一个查询
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) 我的要求是找到一个月内所有失效的天数.以下是我的示例查询.
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)