PowerDesigner生成sql和反向工程生成ER图的问题
一、PowerDesigner生成sql问题
生成sql的方法是 Database -->Generate Database (Ctrl + G ) 但是提示
Could not load VBScript engine.
Check VBScript installation.
Generation aborted due to errors detected during the verification of the model.
检查了好久 发现将check model 去掉就可以了!其中,
one file on是否需要按照表生成许多个sql(默认选上,即不需要)
odbc generation sql直接生成到数据库中
Automatic archive 生成sql同时生成apm文件。
二、Power designer, 反向工程生成ER图
1. In PowerDesigner, choose File | Reverse Engineer | Database.... The New Physical Data Model Dialog box, shown next, appears.DBMS要选成Oracle 10G, 然后点"OK"
2.在出来的database reverse engineering窗口里, 点上"Using script files", 再点那个"新建"的图标, 会出来个选择文件的对话框,选择script file的位置.then press "OK".
3. 生成ER diagram
......
在工作中常常碰到这种情况:我们需要将一个应用系统的基础数据导出来,以便基础数据下次导入到另外一个场景。
事实上,这种情况我们可以用pl/sql的功能Export Tables来实现。Export Table有三种导出方式:Oracle Export,SQL Insert,PL/SQL Developer。通常我们会使用Oracle Export,SQL Insert的功能。(第三种俺没用过,呵呵,所以这么说。)
Oracle Export是将数据导出成dmp格式的文件,这样有个麻烦,不能看到里面的内容。虽然它的速度很快,但是缺点太明显,所以至少我一般不用它。除非是导出含有clob,blob的表,才会用到这个功能。
SQL Insert是最实用的功能。当然它也有缺点,比如不能使用clob,blob。但是优点明显,就是能看到sql语句的详细内容。所以一般我用它,除非clob,blob才用export tables的功能。
实际中,一个系统可能有几百个表,但是基础数据表可能才100多个,这样使用PL/SQL的SQL Insert功能就会出现一种情况:每次我导出基础数据的时候,就要从用户的几百个表中选择那100多个表。这样很考验人的耐心的,反正我是被这个搞得头晕眼花。
正是因为我没耐心,所以就写了这片短文,希望在今后的工作中,能用更快的速度来完成导出导入功能,所以就自己做了一 ......
使用SQL语句创建数据库
本文转自:http://www.cppblog.com/twzheng/archive/2008/07/07/55508.html
用CREATE DATABASE创建数据库的语法格式:
CREATE DATABASE database_name /*指定数据库名*/
[ON子句] /*指定数据库文件和文件组属性*/
LOG子句] /*指定日志文件属性*/
语法说明:
a) Database_name:数据库逻辑名称,最大长度不可超过128个字符
b)[ON子句]的语法说明:
ON[PRIMARY][<filespec>[,…n]][<filegroup>[,…n]]
(<filespec>[,…n]表示可出现n个<filespec>,<fil ......
从A表随机取2条记录,用SELECT TOP 10 * from ywle order by newid()
order by 一般是根据某一字段排序,newid()的返回值是uniqueidentifier ,order by newid()随机选取记录是如何进行的
newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以最终结果再按这个排序, 排序的结果当然就是无序的了
或者
select top 10 *,newid() as Random from ywle where ywlename='001' ordey by Random
下者效率要高些
因为newid()返回的是uniqueidentifier类型的唯一值。newid()每次产生的值都不一样,那么根据这样的值进行排序,每次的结果也是不一样的。
原理是 把所有的ID出取然后用随机函数取出其中一个,然后用这个随机取到的ID去数据库里再取出记录,所有代价有点大。
sql server的随机函数newID()和RAND()
SELECT * from Northwind..Orders ORDER BY NEWID()
--随机排序
SELECT TOP 10 * from Northwind..Orders ORDER BY NEWID()
--从Orders表中随机取出10条记录
示例
A.对变量使用 ......
1 ---上个月月初第一天
2 select CONVERT(varchar(12) , DATEADD(mm,DATEDIFF(mm,0,dateadd(mm,-1,getdate())),0), 112 )
3
4 ---上个月月末最后一天
5 select CONVERT(varchar(12),dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate()),0)), 112 )
6
7 --1. 显示本月第一天
8
9 SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
10
11 select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)
12
13 --2. 显示本月最后一天
14
15 select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))
16
17 SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
18
19 --3. 上个月的最后一天
20
21 SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
22
23 --4. 本月的第一个星期一
24 select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)
25
26 --5. 本年的第一天
27
28 SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
......
根据生日的xx月xx日查找在$checkDate计算,$before日后生日的客户:
$checkDate为YYYY-MM-DD
WHERE substring(ADDDATE( '$checkDate', $before ),6,10)=substring(DATE_FORMAT(birthday,'%Y-%m-%d'),6,10)
$dates 天内生日的客户未考虑到平年、闰年::
$sql.=" (dayofyear( birthday )-dayofyear( '$checkDate' )
BETWEEN 0 AND $dates
OR dayofyear( ADDDATE( birthday, $dates ) ) - dayofyear( ADDDATE( '$checkDate', $dates ) )
BETWEEN 0 AND $dates)"; ......