今天oracle的问题

 我用 PowerDesigner 创建了表关系  并成功导出了SQL脚本,

然后导入oracle数据库 @+路径;

然后想初始化表中的数据,写了init-data.sql  再次导入oracle数据库

结果出错了:           
ERROR at line 1:
ORA-00942: table or view does not exist
全是这种错误,

ORA-00942:table or view does not exist
Cause:The table or view entered does not exist, a synonym that is not allowed here was used, or a view was referenced where a table is required. Existing user tables and views can be listed by querying the data dictionary. Certain privileges may be required to access the table. If an application returned this message, the table the application tried to access does not exist in the database, or the application does not have access to it.
Action:Check each of the following:

 

  • the spelling of the table or view name.
  • that a view is not specified where a table is required.
  • that an existing table or view name exists.

Contact the database administrator if the table needs to be created or if user or application privileges are required to access the table.

Also, if attempting to access a table or view in another schema, make certain the correct schema is referenced and that access to the object is granted.

 

查了以后是init-data.sql中表名出现了错误,  原来PowerDesigner设计的表中表名带了双引号 形如:"t_clietn"

结果在init-data.sql中我没有加双引号 ,导致频频报错·····  我晕··

<think>在Oracle中,我们可以使用TO_CHAR函数和日期格式化模型来获取日期的星期信息。具体来说,我们可以使用:TO_CHAR(sysdate,'D')--返回一周中的第几天(1=星期日,2=星期一,...,7=星期六),注意这取决于NLS设置,可能周日是1或周一为1。或者TO_CHAR(sysdate,'DAY')--返回星期的全称(如SUNDAY,MONDAY等,大小写和语言取决于NLS设置)但是,需要注意NLS_TERRITORY设置可能会影响一周的第一天是星期日还是星期一。如果我们想要一个标准的ISO星期(周一=1,周日=7),可以使用:TO_CHAR(sysdate,'D')可能不够稳定,因为不同地区设置结果不同。更可靠的方式是使用ISO标准:ISO星期一到星期日分别对应1到7,可以用:TO_CHAR(sysdate,'IW')返回ISO标准的周数,但是不直接返回星期几。实际上,我们可以用:TO_CHAR(sysdate,'D')会返回1到7,但起始日取决于会话参数。为了确保周一为1,周日为7,我们可以调整:在ISO标准中,可以使用以下方法:SELECTTO_CHAR(sysdate,'fmD')ASweekday_numFROMdual;--这取决于NLS设置为了独立于NLS设置,我们可以使用:SELECTTRUNC(sysdate)-TRUNC(sysdate,'IW')+1ASiso_weekdayFROMdual;解释:TRUNC(sysdate,'IW')返回本周第一天(按ISO标准:星期一),然后sysdate减去这个日期,得到的是天数差,然后加1(因为星期一我们希望是1)但是这样计算出来的星期一是0+1=1,星期二是1+1=2,...星期日是6+1=7。这样符合ISO标准。但是,如果我们只需要星期的名称,并且不介意依赖NLS设置,那么直接用TO_CHAR(,'DAY')就可以。所以,具体方法有:1.获取星期几的数字(1-7,ISO标准,星期一到星期日对应1到7):方法:SELECTTO_CHAR(sysdate,'D')FROMdual;--不稳定的,依赖NLSSELECTTO_CHAR(sysdate,'fmD')FROMdual;--同上,只是去掉了前面的空格(如果使用DAY会有空格)独立于NLS的方法:SELECTTRUNC(sysdate)-TRUNC(sysdate,'IW')+1FROMdual;2.获取星期几的名称:SELECTTO_CHAR(sysdate,'DAY')FROMdual;--返回当前会话语言的星期名称,比如“星期一”或“MONDAY”SELECTTO_CHAR(sysdate,'DY')FROMdual;--返回缩写的星期名称3.如果想要英文名称而不依赖当前会话设置,可以指定语言:SELECTTO_CHAR(sysdate,'DAY','NLS_DATE_LANGUAGE=ENGLISH')FROMdual;示例代码:今天(系统日期)是周几(数字1-7,星期一为1,星期日为7):独立于NLS的方法:SELECTTRUNC(SYSDATE)-TRUNC(SYSDATE,'IW')+1ASISO_WEEKDAYFROMDUAL;今天(系统日期)的星期名称(英文):SELECTTO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE=ENGLISH')ASWEEK_DAYFROMDUAL;注意:TRUNC(date,'IW')按ISO标准返回本周星期一的日期。因此,我们给出以下两种情况的代码:</think> ### Oracle判断当前日期是周几的方法 在Oracle中,最常用的方法是使用`TO_CHAR`函数配合日期格式化模型。以下是几种实现方式: #### 方法1:使用`TO_CHAR(date, 'D')`(星期数字) ```sql SELECT TO_CHAR(SYSDATE, 'D') AS day_of_week FROM dual; ``` **解释**: - `'D'`格式返回1-7的数字表示(1=周日,2=周一,...,7=周六) - 简单直接但结果依赖NLS_TERRITORY设置(某些区域可能周一作为第一天) #### 方法2:使用`TO_CHAR(date, 'DAY')`(全称星期名) ```sql SELECT TRIM(TO_CHAR(SYSDATE, 'DAY')) AS week_day FROM dual; ``` **解释**: - `'DAY'`格式返回星期全称(如"MONDAY") - `TRIM()`移除尾部空格(Oracle默认右补空格到9字符长度) - 语言依赖NLS_DATE_LANGUAGE设置 #### 方法3:显式指定语言(推荐) ```sql SELECT TO_CHAR( SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH' ) AS english_weekday FROM dual; ``` **解释**: - 指定`NLS_DATE_LANGUAGE=ENGLISH`确保返回英文名称 - 避免区域设置差异导致的问题 #### 方法4:使用`TO_CHAR(date, 'Dy')`(缩写) ```sql SELECT TO_CHAR(SYSDATE, 'Dy') AS weekday_short FROM dual; ``` **解释**: - `'Dy'`格式返回星期缩写(如"Mon") - 返回值为大写,长度固定为3个字符 #### 方法5:使用ISO标准(周一为1) ```sql SELECT TO_CHAR(SYSDATE, 'fmD') AS iso_day FROM dual; ``` **解释**: - `fm`修饰符删除填充空格 - 符合ISO 8601标准(1=周一,7=周日) **完整判断示例**: ```sql SELECT CASE TO_CHAR(SYSDATE, 'D') WHEN '1' THEN 'Sunday' WHEN '2' THEN 'Monday' WHEN '3' THEN 'Tuesday' WHEN '4' THEN 'Wednesday' WHEN '5' THEN 'Thursday' WHEN '6' THEN 'Friday' WHEN '7' THEN 'Saturday' END AS day_name FROM dual; ``` **输出示例**: ``` WEEK_DAY -------- Wednesday ``` **注意事项**: 1. 周起始依据`NLS_TERRITORY`设置(美国:周日为第1天,欧洲:周一为第1天) 2. 使用`ALTER SESSION SET NLS_TERRITORY = 'AMERICA';`可临时修改设置 3. 长期使用的系统推荐显式指定语言参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值