请告诉我在Oracle中使用TNS_ADMIN参数有什么用?我正在使用oracle数据库在Unix上工作.
是否需要此参数来定位sqlplus.我正在执行一个脚本,在该脚本中对Oracle数据库执行更新查询.
使用crontab执行时,脚本失败并显示127错误代码.
我怀疑(eval)失败的脚本内容是
----------
cmd='sqlplus ${ORALOGIN} < SQLS
----------
eval $cmd
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以部署在多个数据库上的发布脚本,但是可以在以后将数据合并在一起.处理此问题的显而易见的方法是在后续部署中将生产数据的序列号设置得足够高以防止冲突.
问题在于提出一个发布脚本,该脚本将接受环境编号并适当地设置序列的"Start With"值.理想情况下,我想使用这样的东西:
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
CREATE SEQUENCE seq1 START WITH &EnvironNum*100000;
--[more scripting]
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为您无法在DDL中计算数值表达式.
另一种选择是通过PL/SQL使用动态SQL创建序列.
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
EXEC execute immediate 'CREATE SEQUENCE seq1 START WITH ' || &EnvironNum*100000;
--[more scripting]
Run Code Online (Sandbox Code Playgroud)
但是,我宁愿避免这种解决方案,因为我通常会尽量避免在PL/SQL中发出DDL.
最后,我提出的第三个选项是简单地接受Start With值作为替换变量,而不是环境号.
有没有人更好地考虑如何解决这个问题?
我在Oracle中有以下作为CREATE TABLE:
CREATE TABLE cs2_users (
empnum varchar2(12) PRIMARY KEY,
toolsId varchar2(20)
CONSTRAINT nn_cs2_users_toolsId NOT NULL
CONSTRAINT fk_cs2_users_users FOREIGN KEY REFERENCES users.userid,
admin number(1,0) DEFAULT 0
CONSTRAINT nn_cs2_users_admin NOT NULL
CONSTRAINT ck_cs2_users_admin (admin IN (0,1)),
givenname varchar2(30) NOT NULL,
middlename varchar2(30),
sn varchar2(30) NOT NULL,
mail varchar2(50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
但是它失败并出现此错误:
ERROR at line 5:
ORA-02253: constraint specification not allowed here`
Run Code Online (Sandbox Code Playgroud)
当我使用SQL*Plus连接时,这是版本信息:
SQL*Plus: Release 11.2.0.3.0 Production on Tue Dec 18 16:38:27 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved. …Run Code Online (Sandbox Code Playgroud) 我有一个调用file.sql的shell脚本
我正在寻找一种方法将一些参数传递给我的file.sql.
如果我没有将带有某些值的变量传递给sql脚本,我将不得不使用SELECT语句创建多个.sql文件,所有改变的是几个单词.
我的shell脚本调用file.sql:
sqlplus -S user/pass@localhost
echo " Processing triples"
./load_triples.sh BUILDING/Mapping_File BUILDING Y >> load_semantic.log
@/opt/D2RQ/file.sql
exit;
EOF
Run Code Online (Sandbox Code Playgroud)
这就是我的file.sql的样子:
SET ECHO ON;
SPOOL count.log
SELECT COUNT(*) as total_count
FROM TABLE(SEM_MATCH(
'{
?s rdf:type :ProcessSpec .
?s ?p ?o
}',SEM_Models('BUILDING'),NULL,
SEM_ALIASES(SEM_ALIAS('','http://VISION/DataSource/SEMANTIC_CACHE#')),NULL));
SPOOL OFF;
Run Code Online (Sandbox Code Playgroud)
我可以修改我的shell脚本以便它传递变量名吗?
即:model ="BUILDING"并将其传递给file.sql?
有什么相似的吗?
我已经搜索了这个论坛,并通过谷歌搜索我的问题的答案,但我无法找到我的挑战的具体答案.这就是为什么我在这里要求它希望得到你们其中一个人的回答.
我想使用多个SQL文件,而一个SQL文件是执行带参数的其他SQL文件的控制文件.该文件名为:startup.sql
我有一个包含所有值的表(不介意列的名称,我为我的帖子更改了它们).
create table control (
S varchar2(15) not null,
N varchar2(25 char) not null,
B varchar2(25 char) not null,
Acheck varchar2(25 char) not null,
Adcheck varchar2(25) not null,
Blu varchar2(25) not null,
ADB varchar2(25)
)
Run Code Online (Sandbox Code Playgroud)
插入以下其中一个(有更多条目,但一个足以向您显示工作方式):
insert into control (S,N,B,Acheck,Adcheck,Blu,ADB)
values('Test','B','J','J','N','N', '');
Run Code Online (Sandbox Code Playgroud)
我的控制文件如下:
set escape on
set serveroutput on
SET DEFINE ON
declare
cursor c_lees_control is
select S, N, B, Acheck, Adcheck, Blu, ADB
from control
v_s varchar2(30);
v_b varchar2(30);
v_blu varchar2(30);
begin
for r_lees_control in c_lees_control
loop …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用SQLPLUS中的SPOOL命令为数据库中的对象生成所有DDL
SET trimspool ON
SET wrap off
SET heading off
SET linesize 300
SET echo off
SET pages 999
SET long 90000
Col object_type format a10000
Col object_name format a10000
Col owner format a10000
spool export.out
SELECT DBMS_METADATA.GET_DDL(object_type, object_name, owner)
FROM all_OBJECTS
WHERE OWNER = 'DMALM'
and object_type not like '%PARTITION'
and object_type not like '%BODY'
and object_type not like '%LOB';
spool off
quit
Run Code Online (Sandbox Code Playgroud)
但我得到的输出文件是在col#80切割.如何防止输出文件被包装?
尝试使用以下语句插入值时出错
INSERT INTO PRODUCT (PRODUCT_NUM, ITEM_NUM, DATE)
VALUES (’11’,’19’, TO_DATE(’01-JAN-2001’,’DD-MON-YYYY’));
Run Code Online (Sandbox Code Playgroud)
错误:
ORA-01756:引用的字符串未正确终止
是否可以从嵌套脚本换行到不同的文件?我有一个脚本调用另一个脚本.第一个脚本将所有内容假脱机到输出.我想只将第二个脚本的某些部分保存在不同的文件中.
但是当我在第二个脚本中停止假脱机时,它会完全停止,我不知道如何再次启动它以使其在第一个文件中继续假脱机.
例如,有这两个脚本,第二个选择到MY_TABLE不会被假脱机.
firstScript.sql
prompt --------------Start firstScript--------------
set pagesize 0
set heading on
set feedback on
set timing on
set time on
set echo on
set verify on
spool testFirstScript.sql
select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual;
@secondScript.sql
select * from MY_TABLE where Id = 1; -- This doesn't get spooled.
spool off
prompt --------------End firstScript--------------
Run Code Online (Sandbox Code Playgroud)
secondScript.sql
prompt --------------Start secondScript--------------
spool testSecondScript.sql
select * from MY_TABLE;
spool off
prompt --------------End secondScript--------------
Run Code Online (Sandbox Code Playgroud)
线轴输出:
testFirstScript.sql
11:28:23 SQL>
11:28:23 SQL> select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual; …Run Code Online (Sandbox Code Playgroud) 执行以下代码时,它只是说过程已完成,并且不打印信息.
BEGIN
dbms_output.put_line('This is my first program');
END;
/
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,编译器说,PL/SQL过程已成功完成,但不会向控制台打印任何内容.我能做什么 ?
sqlplus ×10
oracle ×8
sql ×3
oracle10g ×2
plsql ×2
shell ×2
connection ×1
dbms-output ×1
spool ×1
unix ×1