扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
需要给调用者提供Oracle数据库用户
成都创新互联专注于企业营销型网站、网站重做改版、襄城网站定制设计、自适应品牌网站建设、H5页面制作、购物商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为襄城等各大城市提供网站开发制作服务。
图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。
视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。
应满足条件:
源表尽量使单表,否则限制会比较多。
下面的情况不应出现,否则不允许更新:
1.distinct 关键字
2.集合运算或分组函数。eg:intersect、sum、max、count ....
3.出现group by 、order by、model、start with .....
4.出现伪列关键字:eg:rownum.
3.还应考虑基表的一些约束,这些约束对视图数据的更新都有一定影响,如果需要创建可以更新的视图,可以使用instead of 触发器。
oracle同时查询多张表较为简单,用sql和视图都可以完成,但是oracle查询多张视图就不好做了,要是还有分页和检索的功能就更加蛋疼了,今天老夫遇到了这样的问题,接下来就和大伙分享下:
//分页的语句
String fenyeSql_1 = "SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (";
String fenyeSql_2 = " ) A WHERE ROWNUM = " + end + " ) WHERE RN = " + from + " ";
//查询条数的语句
String fenyeCountSql_1 = " select count(*) from ( ";
String fenyeCountSql_2 = " ) ";
String union = " union ";
//第一张视图
String sql_gjy_select = " select to_char(t.xm) xm,to_char(t.xb) xb,t.qslc qslc,t.zzlc ,to_char(t.检查日期) 检查日期,to_char(t.上传时间) 上传时间,t.上传单位,t.路局名,t.jcsbid sclx from v$gwsj_jcsjlx t where 1=1 ";
//第二张视图
String sql_tqi_select = " select t2.xm xm,t2.xb xb,t2.qslc qslc,t2.zzlc,to_char(t2.检查日期,'yyyy-MM-dd') 检查日期,to_char(t2.上传时间,'yyyy-MM-dd') 上传时间,t2.上传单位,t2.路局名,4 sclx from v$tqi_line t2 where 1=1 ";
//第三张视图
String sql_g4d_select = " select t3.xm xm,t3.xb xb,t3.qslc qslc,t3.zzlc,t3.检查日期 检查日期,to_char(t3.上传时间,'yyyy-MM-dd') 上传时间,t3.上传单位,t3.路局名,5 sclx from v$g4d_line t3 where 1=1 ";
//注意三张视图的数据类型要转换一致,而且列的数量要一样哦
//接下来就是蛋疼的凭借sql
// 条件1
if (null != year null != month !"".equals(year)
!"".equals(month)) {
String selectDate = year + "-";
if (month.toCharArray().length == 1) {
selectDate += "0" + month;
} else if (month.toCharArray().length == 2) {
selectDate += month;
}
sql_gjy_select += " and t.检查日期 like '%" + selectDate + "%'";
sql_tqi_select += " and t2.检查日期 like '%" + selectDate + "%'";
sql_g4d_select += " and t3.检查日期 like '%" + selectDate + "%'";
}
//条件2
if (null != fdwbh !"".equals(fdwbh)) {
sql_gjy_select += " and t.上传单位='" + fdwbh + "'";
sql_tqi_select += " and t2.上传单位='" + fdwbh + "'";
sql_g4d_select += " and t3.上传单位='" + fdwbh + "'";
}
//
//
中间条件省略若干的
//
//
// 查询数据
String sql_select = fenyeSql_1 + sql_gjy_select + union
+ sql_tqi_select + union + sql_g4d_select + fenyeSql_2;
// 对应总条数
String sql_count = fenyeCountSql_1 + sql_gjy_select + union
+ sql_tqi_select + union + sql_g4d_select + fenyeCountSql_2;
PreparedStatement ps = null;
String permissionJson = null;
起码有两种办法:
1、在 Oracle 中导出数据,然后导入到 SQL Server;
2、在 SQL Server 中使用链接服务器(linked server)方式连接 Oracle,然后就可以那个视图像本地视图一样使用了;
既然是课程设计,那就好好学学吧。
用DW 连接ORACLE视图:
创建数据库连接“ dwconn ”。切换到数据库面板,单击【+】按钮,在弹出的菜单中选择【 OLE DB 连接】,创建数据库连接“ dwconn ”,如图:
提示:在图所示的步骤中,由于这里连接的数据库是 Access 数据库,所以应选择【 OLE DB 连接】,而当要连接的数据库是 SQL SERVER 时,则应选择【 SQL 服务器连接】。
需要给数据库地址
在实际项目中常常需要做接口提供给其他平台使用,需要给调用者提供Oracle数据库用户,此用户可能只能访问我方生产库中的某几张表,而且只能查询不能增删改,这就需要我们从Oracle数据库中给接口设置相应的权限,具体如下:
假设我方用户为scott,我们给第三方用户建立的接口用户为scott_read,我们开放给第三方用户的表为student表。
1.使用system用户登录:sqlplus system/password@orcl。
2.创建scott_read用户:create user scott_read(用户名) identified by tiger(密码)。
3.将connect和resource权限赋给scott_read用户:grant connect,resource to scott_read。
注意:此处一定注意不要将dba权限赋给scott_read,否则此用户可以操作我们数据库的任何东西,这是大忌。
4.将scott的student表查询权限赋给scott_read用户:grant select on scott.student(表或视图名) to scott_read。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流