方式一
当然是windows电脑安装达梦管理工具,直接把脚本贴进去执行,但避免不了出现误操作
在这里插入图片描述
方式二
使用shell脚本执行sql
1. 先找到达梦数据库安装位置吧
[root@localhost ~]# ss -nlp |grep 5236
tcp LISTEN 0 128 [::]:5236 [::]:* users:(("dmserver",pid=103380,fd=4))
[root@localhost ~]# ps -ef|grep dmserver
root 85093 66993 0 17:56 pts/6 00:00:00 grep --color=auto dmserver
dmdba 103380 1 8 13:36 ? 00:23:18 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG_JW/dm.ini -noconsole
1
2
3
4
5
1
2
3
4
5
2. 直接在linux上执行shell命令执行sql脚本
2.1 # disql username/password:port
使用这个命令可以进入sql控制台
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.524(ms)
disql V8
SQL>
进入SQL>后:
直接输入sql语句,使用英文分号结尾,回车执行。
使用“`sql文件路径”,可以执行sql脚本文件,注意前面有一个小撇(esc和tab中间的键)
使用“start sql文件路径”,可以执行sql脚本文件。
2.2 # disql username/password:port `sql文件位置
使用这个命令可以执行sql脚本
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236 \`sql/test.sql
[root@localhost sql]#
1
2
1
2
但需注意
这个脚本执行完sql会停留在sql执行行,如需执行完返回到shell命令行,则需要在sql文件结尾添加:exit; 。
这个shell语句不能用start执行sql文件,只能使用“`”,并且前面需要添加转义字符“\”。
2.3 达梦sql脚本注意事项
目前发现-创建schema语句以及执行过程结尾,都需要添加“/”结束
例如执行以下语句,回车执行,一直在输出数字,直到输入“/”,再回车执行,才执行成功。
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 6.121(ms)
disql V8
SQL> create schema test;
2
3 /
操作已执行
已用时间: 26.698(毫秒). 执行号:700604.
SQL>
sql脚本示例:
-- 创建schema
CREATE SCHEMA DB_ZFBA_MOBILE;
/
-- 执行过程
begin
if exists(select 1 from DBA_TAB_COLUMNS where OWNER='DB_ZFBA_MOBILE' AND TABLE_NAME='T_ZJTQD') then
EXECUTE immediate 'drop table DB_ZFBA_MOBILE.T_ZJTQD';
end if;
end;
/
create table DB_ZFBA_MOBILE.T_ZJTQD
(
"C_BH" char(32) NOT NULL, -- 主键
"C_BH_AJ" varchar2(32) NULL, -- 案件编号
……
"DT_ZHXGSJ" datetime NULL, -- 最后修改时间
constraint PK_T_ZJTQD primary key( C_BH )
);
sql文件结尾添加exit;,保证多个sql文件执行不会中断
3. 编写shell脚本
注意:shell脚本一定在linux中编写,windows编写的有些语句执行不成功(目前原因未知)
例如: a=a b=b c=$a$b echo $c 在windows下编写,linux中执行完会输出b
#!/bin/bash
# 请先配置数据库连接信息,再执行此脚本
DM_PATH=/home/dmdba/dmdbms #达梦数据库的安装位置
USERNAME=cpuser #达梦数据库连接用户名
PASSWORD=cpuser123 #达梦数据库连接密码
PORT=5236 #达梦数据库连接端口号
# 下面的信息请不要随意修改
CONNECT_INFO=$USERNAME/$PASSWORD:$PORT
echo "连接信息:"$CONNECT_INFO
# STEP 1
echo "【开始执行】---- sql/02_创建数据库对象/00.CS_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/00.CS_GSYS.sql >> DB_DM.log
echo "【执行完成】---- sql/02_创建数据库对象/00.CS_GSYS.sql"
# STEP 2
echo "【开始执行】---- sql/02_创建数据库对象/01.CT_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/01.CT_GSYS.sql >> DB_DM.log
echo "【执行完成】---- sql/02_创建数据库对象/01.CT_GSYS.sql"
# STEP 3
echo "【开始执行】---- sql/02_创建数据库对象/02.CC_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/02.CC_GSYS.sql >> DB_DM.log
echo "【执行完成】---- sql/02_创建数据库对象/02.CC_GSYS.sql"
# STEP 4
echo "【开始执行】---- sql/02_创建数据库对象/03.CI_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/03.CI_GSYS.sql >> DB_DM.log
echo "【执行完成】---- sql/02_创建数据库对象/03.CI_GSYS.sql"
# STEP 5
echo "【开始执行】---- sql/03_初始化数据/02.I_T_Aty_CodeType_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化数据/02.I_T_Aty_CodeType_GSYS.sql >> DB_DM.log
echo "【执行完成】---- sql/03_初始化数据/02.I_T_Aty_CodeType_GSYS.sql"
# STEP 6
echo "【开始执行】---- sql/03_初始化数据/02.I_T_Aty_Code_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化数据/02.I_T_Aty_Code_GSYS.sql >> DB_DM.log
echo "【执行完成】---- sql/03_初始化数据/02.I_T_Aty_Code_GSYS.sql"
# Complete
echo "【SQL全部执行完成】---- 日志请查看DB_DM.log"
执行完成后,通过shell控制台和DB_DM.log日志可以分析sql脚本是否执行成功。
‘贰’ sql2000中可以用这条语句生成一个表: select 姓名,年龄,班级 into 生成的表 from 源表
这是生成表查询。例如:
select * into new_table from table_name;
达梦数据库据称兼容ORACLE PL/SQL常用语法90%,生成表查询作为最基础性的SQL语句相信它是支持的可直接使用。
‘叁’ 达梦数据库怎么写shell脚本,怎么通过shell脚本调用sql脚本
通过shell脚本调用sql脚本:
1、shell脚本调用sql脚本
#首先编辑sql文件
oracle@SZDB:~> more dept.sql
connect scott/tiger
spool /tmp/dept.lst
set linesize 100 pagesize 80
select * from dept;
spool off;
exit;
#编辑shell脚本文件,在shell脚本内调用sql脚本
oracle@SZDB:~> more get_dept.sh
#!/bin/bash
# set environment variable
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_SID=CNMMBO
sqlplus -S /nolog @/users/oracle/dept.sql #注意此处执行sql脚本的方法 -S 表示以静默方式执行
exit
#授予脚本执行权限
oracle@SZDB:~> chmod 775 get_dept.sh
-->执行shell脚本
oracle@SZDB:~> ./get_dept.sh
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
2、shell脚本调用rman脚本
#首先编辑RMAN脚本
oracle@SZDB:~> more rman.rcv
RUN {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/users/oracle/bak/%d_%F';
ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;
ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;
SET LIMIT CHANNEL CH1 READRATE=10240;
SET LIMIT CHANNEL CH1 KBYTES=4096000;
SET LIMIT CHANNEL CH2 READRATE=10240;
SET LIMIT CHANNEL CH2 KBYTES=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
DATABASE FORMAT '/users/oracle/bak/%d_FULL__%U';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '/users/oracle/bak/%d_LF_%U' DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL CH1;
RELEASE CHANNEL CH2;
}
#编辑shell脚本文件,在shell脚本内调用rman脚本
oracle@SZDB:~> more rman_bak.sh
#!/bin/bash
# set environment variable
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_SID=CNMMBO
$ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.log
exit
#授予脚本执行权限
oracle@SZDB:~> chmod 775 rman_bak.sh
#执行shell脚本
‘肆’ 达梦数据库 如何使用sql语句查询,数据库容量大小和数据库使用量大小
SELECT sum(df.TOTAL_SIZE) - sum(df.FREE_SIZE) as used ,
sum(df.TOTAL_SIZE) as total,
sum(df.FREE_SIZE) as free
FROM "SYS".V$TABLESPACE AS ts, "SYS".V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;
‘伍’ 数据库如何设置主键(ID)自动增长啊(SQL语句)
在创建表的时候可以设置,方法如下,用一下sql语句。
createtabletableName(
idintidentity(1,1)primarykey,
datavarchar(50))
解释:其中identity(1,1)代表自增,第一个1代表从1开始计数,第二个1代表每次增长1。
(5)达梦数据库sql语句扩展阅读:
SQL全名是结构化查询语言[1](Structured Query Language),是用于数据库中的标准数据查询语言,IBM公司最早使用在其开发的数据库系统中。1986年10月,美国国家标准学会(ANSI) 对 SQL 进行规范后,以此作为关系式数据库管理系统的标准语言 (ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对 SQL 规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
参考资料:
网络-SQL语言
‘陆’ 急求!急求!在线等!达梦数据库时间差
不用这样的,sqlserver中有相应的函数直接进行时间差的计算,输出结果可以按照秒、分、时进行。你查一下就能得到。
‘柒’ sql 列转行
先建一张转换后的表
create table changed
(
id number,
key varchar2(10),
val varchar2(10)
)
然后执行下面的插入语句
insert all
into changed(id,key,val) values(id,'a',a)
into changed(id,key,val) values(id,'b',b)
into changed(id,key,val) values(id,'c',c)
into changed(id,key,val) values(id,'d',d)
into changed(id,key,val) values(id,'e',e)
select id,a,b,c,d,e from change;
如果需要继续添加,就模仿上面的格式写好了,最后别忘记commit;