重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
客户端 NLS_LANG 的设置方法
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的二连浩特网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
Windows:
# 常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
# 常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
可以通过修改注册表键值永久设置
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMExx/NLS_LANG
你对key_preserved table理解有误
什么是键值保存表?
如果基表的每条记录在视图结果中最多出现1次(或者不出现,即不会重复),那么该基表就是键值保存表。
继续用你的脚本
INSERT INTO test2 VALUES(2,3.9);
这时select * from test_view3 where col1=2,返回如下两条数据
2,1.2,2.2
2,1.2,3.9
其中test2才是key_preserved table。所以只能修改col3字段
可以试想,如果执行UPDATE test_view3 a SET col2 = 1.3 WHERE a.col3 = 2.2;这样的语句成功
基表test2中col2被修改,那 视图中2,1.2,3.9这条数据如何显示,update语句没有修改col3=3.9的数据,但是这条数据中col2已经被修改。
所以只能修改key_preserved table
Oracle创建表并没有键值的概念。如果非要与创建表相联系的话,应该是指列(字段)的数据类型和长度。Oracle的常用数据类型有number、char、varchar2、date等。
create table XXX(
aa char(2),
bb varchar2(10));
在这个例子中char(2)和varchar2(10)就是键值了。不过总感觉还是别扭,键有时还代表主键(primary key)的意思。还是不要使用键值的概念为好。
从表的键值改掉再更新主表的键值。
例如:CREATE OR REPLACE TRIGGER TRG_触发器名 --创建触发器
BEFORE INSERT OR UPDATE --意思是在插入或更新操作之前
ON 主表名 --为主表创建
REFERENCING OLD AS OLDROW NEW AS NEWROW --定义数据行
FOR EACH ROW
BEGIN
IF INSERTING THEN
--向主表插入时做的操作
ELSE
--更新主表时做的操作
--Update 从表的操作写在这里就可以。
END IF;
END;
如果不是很清楚的话,你可以再上网查一下具体的触发器写法,祝你成功!
打开oracle net manager查查就好。
或者在cmd中输入netca 按照提示重新配置一个。
**********补充:*********
和图片中写一样的就好.
***********************
(select t.bookid a,q.depid b from book t,dep q where t.depid=q.id)返回的是一个结果集,而不是一个表。
如果想update里面的内容,建议把数据放到一个临时表里,然后再update。
没有主键不是说你的原来的两个表的主键,而是指你查询出来的结果集。