我需要根据XSD验证传入的文件.两者都将在服务器文件系统上.
我看过了dbms_xmlschema,但是有问题让它发挥作用.
使用Java可以更容易吗?
我可以在数据库中放入的最简单的类是什么?
这是一个简单的例子:
DECLARE
v_schema_url VARCHAR2(200) := 'http://www.example.com/schema.xsd';
v_blob bLOB;
v_clob CLOB;
v_xml XMLTYPE;
BEGIN
begin
dbms_xmlschema.deleteschema(v_schema_url);
exception
when others then
null;
end;
dbms_xmlschema.registerSchema(schemaURL => v_schema_url,
schemaDoc => '
<xs:schema targetNamespace="http://www.example.com"
xmlns:ns="http://www.example.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0">
<xs:element name="something" type="xs:string"/>
</xs:schema>',
local => TRUE);
v_xml := XMLTYPE.createxml('<something xmlns="http://www.xx.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/schema.xsd">
data
</something>');
IF v_xml.isschemavalid(v_schema_url) = 1 THEN
dbms_output.put_line('valid');
ELSE
dbms_output.put_line('not valid');
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
这会生成以下错误:
ORA-01031: insufficient privileges
ORA-06512: at "XDB.DBMS_XDBZ0", line 275
ORA-06512: at "XDB.DBMS_XDBZ", line …Run Code Online (Sandbox Code Playgroud) 我想为我的大多数数据库对象创建ddl脚本.dbms_metadata.get_ddl适用于大多数对象类型.例如,以下内容为视图创建ddl:
select dbms_metadata.get_ddl ( 'VIEW', 'SAMPLE_VIEW') from dual
Run Code Online (Sandbox Code Playgroud)
另一方面,它不适用于object_type'JOB'.下列:
select dbms_metadata.get_ddl( 'JOB', 'SAMPLE_JOB' ) from dual
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
ORA-31604: invalid NAME parameter "NAME" for object type JOB in function SET_FILTER
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 116
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4705
ORA-06512: at "SYS.DBMS_METADATA_INT", line 8582
ORA-06512: at "SYS.DBMS_METADATA", line 2882
ORA-06512: at "SYS.DBMS_METADATA", line 2748
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
如果我使用列出我的工作
select * from user_objects where object_type='JOB'
Run Code Online (Sandbox Code Playgroud)
它显示了SAMPLE_JOB(就像它显示了SAMPLE_VIEW,如果过滤了object_type ='VIEW').
为什么它适用于VIEW(以及TABLE,INDEX,TRIGGER,...)而不适用于JOB?
我正在使用Oracle 10g.
下面是我用来从表格中提取数据到平面文件的代码.
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) 我无法使用PL/SQL在Oracle表中执行大量插入操作.我的查询逐行进行,对于每一行,查询进行计算以确定需要插入另一个表的行数.传统的插入工作,但代码需要很长时间才能运行大量的行.为了加快插入速度,我尝试使用Append_Values提示,如下例所示:
BEGIN
FOR iter in 1..100 LOOP
INSERT /*+ APPEND_VALUES*/ INTO test_append_value_hint values (iter);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
执行此操作时,我收到以下错误消息:
ORA-12838: cannot read/modify an object after modifying it in parallel
ORA-06512: at line 3
12838. 00000 - "cannot read/modify an object after modifying it in parallel"
*Cause: Within the same transaction, an attempt was made to add read or
modification statements on a table after it had been modified in parallel
or with direct load. This is not permitted.
*Action: …Run Code Online (Sandbox Code Playgroud) 只是想不通为什么它给了我ORA-06512错误
PROCEDURE PX(pNum INT,pIdM INT,pCv VARCHAR2,pSup FLOAT)
AS
vSOME_EX EXCEPTION;
BEGIN
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
ELSE
EXECUTE IMMEDIATE 'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('||pCv||', '||pSup||', '||pIdM||')';
END IF;
END PX;
Run Code Online (Sandbox Code Playgroud)
制作插入物的表格的结构基础:
CREATE TABLE "DB"."M12GR" (
"IDM12GR" NUMBER(10,0) NOT NULL ENABLE,
"CV" VARCHAR(5) NOT NULL ENABLE,
"SUP" FLOAT(126) NOT NULL ENABLE,
"IDM12" NUMBER(10,0) NOT NULL ENABLE,
CONSTRAINT "PRIMARY_30" PRIMARY KEY ("IDM12GR"),
CONSTRAINT "M12SUELORM12" FOREIGN KEY ("IDM12") REFERENCES "DB"."M12" ("IDM12") ENABLE
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个程序,它创建没有错误.但是当我尝试运行它时,我会得到以下错误.请指教
SQL> begin
2 Update_STUD_Fin ( '1011');
3 end;
4 /
begin
*
ERROR at line 1:
ORA-06511: PL/SQL: cursor already open
ORA-06512: at "ORAIN.UPDATE_STUD_FIN", line 3
ORA-06512: at "ORAIN.UPDATE_STUD_FIN", line 8
ORA-06512: at line 2
Run Code Online (Sandbox Code Playgroud)
程序是
SQL> CREATE OR REPLACE PROCEDURE Update_STUD_Fin ( AIDY_CODE IN VARCHAR2 ) IS
2 CURSOR PublicationC IS
3 SELECT SGidm from SGB
4 WHERE SGCODE_EFF ='201030';
5 BEGIN
6 OPEN PublicationC;
7
8 FOR PublicationR IN PublicationC
9 LOOP
10 DBMS_OUTPUT.PUT_LINE( PublicationR.SGidm );
11 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将文件作为 blob 读入我的 oracle 表中。该文件是 *.gz 数据。我环顾了'网络并找到了一些例子,这就是我想出的:
创建或替换 PROCEDURE upload_supp_data
是
src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
data_dir varchar2(20) := '/tmp/';
文件名 varchar2(50) := '200912020200.rep-ids-top50-sip.txt.gz';
开始
src_file := BFILENAME (data_dir, file_name);
-- 插入一条NULL记录进行锁定
INSERT INTO alarms_supplemental
(alarm_id, resource_id, 补充数据
)
值 (13794740, 1, EMPTY_BLOB ()
)
返回补充数据
进入 dst_file;
-- 锁定记录
选择补充数据
进入 dst_file
FROM alarms_supplemental
WHERE alarm_id = 13794740
更新;
-- 打开文件
DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly);
-- 确定长度
lgh_file := DBMS_LOB.getlength (src_file);
--读取文件
DBMS_LOB.loadfromfile (dst_file, src_file, lgh_file);
-- 更新 blob … 我在Oracle中遇到了一些问题.我尝试创建一个序列,用于在已包含数据的表中生成ID.我尝试使用以下匿名块.
declare y varchar2(2000);
BEGIN
SELECT 'CREATE SEQUENCE ID_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH ' || (max(ID)+1) || ' INCREMENT BY 1 CACHE 20;' INTO y FROM TEST_TABLE;
--dbms_output.put_line(y);
execute immediate y;
end;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error report:
ORA-00911: invalid character
ORA-06512: at line 5
00911. 00000 - "invalid character"
Run Code Online (Sandbox Code Playgroud)
如果我执行y变量的值,它就可以完美地运行.我正在使用SQL Developer作为输入接口并在11g r2 Oracle服务器上工作.我找到了类似的代码,其中'INCREMENT BY'参数是脚本生成的.有人可以解释我的错误吗?