我正在寻找结果0123.56
,以下查询应该有效。
SQL> select to_number(123.56,'0999.99') from dual;
select to_number(123.56,'0999.99') from dual
*
ERROR at line 1:
ORA-01722: invalid number
SQL>
但事实并非如此。我在这里做错了什么?
我正在寻找结果0123.56
,以下查询应该有效。
SQL> select to_number(123.56,'0999.99') from dual;
select to_number(123.56,'0999.99') from dual
*
ERROR at line 1:
ORA-01722: invalid number
SQL>
但事实并非如此。我在这里做错了什么?
SQL> select TO_NUMBER(123.56,'999.9') from dual;
select TO_NUMBER(123.56,'999.9') from dual
*
ERROR at line 1:
ORA-01722: invalid number
SQL> select TO_CHAR(123.56,'999.9') from dual;
TO_CHA
------
123.6
SQL>
我很难理解 Oracle SQL 的细微差别。例如,看看上面的两个查询。
为什么第一个查询失败但第二个查询成功?
http://en.wikipedia.org/wiki/CAP_theorem
http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf
我认为这不是很简单,为什么只有两个
可以适用于任何给定的分布式数据库系统。这个猜想被证明了,但有没有更简单的方法来解释为什么这可能成立?
我不是在寻找证明,只是一种理解为什么这个定理可能有意义的好方法。原因是什么?
http://en.wikipedia.org/wiki/Database_engine
提到数据库引擎又名存储引擎。Oracle 数据库可以使用哪些存储引擎?
我最近意识到我们需要使用一种特殊的语法IS NULL
来将文字与 NULL 进行比较。
为什么= NULL
在这里不起作用?
它是常用的字符集之一。它代表什么?
它是某事的首字母缩写词吗?
SQL> desc tab1
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(1000)
SQL> select * from tab1;
ID NAME
---------- ---------------
1 a
2 b
3 c
SQL> select * from tab1 where id > AVG(id);
select * from tab1 where id > AVG(id)
*
ERROR at line 1:
ORA-00934: group function is not allowed here
SQL>
错误非常清楚,并表示无法做到这一点。但我不明白为什么。该查询非常有意义:
选择
tab1
值id
大于平均值的所有行
例如
SQL> create table dates(d date);
Table created.
SQL> insert into dates select sysdate from dual;
1 row created.
SQL> select * from dates;
D
---------
28-MAY-11
SQL> insert into dates (d) values (select sysdate fom dual);
insert into dates (d) values (select sysdate fom dual)
*
ERROR at line 1:
ORA-00936: missing expression
SQL>
是否可以在创建用户时指定用户的 user_id?
SQL> create user user1 identified by user1;
User created.
SQL> select user_id, username from all_users where username='USER1';
USER_ID USERNAME
---------- ------------------------------
72 USER1
SQL>
不是 72,它可以是我指定的数字吗?
参考数据库的复制和复制之间有区别吗?
我不确定我是否正确,但复制对我来说意味着我们正在一点一点地复制而不了解数据是关于什么的,而复制更像是逻辑复制,我们在数据库级别进行复制。我对么?
还有更多的重复和复制吗?
例如:
alter session set nls_date_format = 'DD-MON-YYYY hh24:mi:ss';
更改会话的日期格式。
这是什么nls
?
在 Oracle 11g 中,有没有办法通过设置标志等来告诉数据库尽可能使用并行执行,而不是在每个 SQL 语句中使用 PARALLEL 提示?
它适用于 SELECT 和 UPDATE 语句。
是否还有其他一些可以使用的语句?
我可以将它与 create 一起使用,但不确定是否真的考虑了提示。
SQL> create /*+ PARALLEL */ table t1
( id number,
name varchar2(40));
Table created.
SQL>
除了 INSERT 和 UPDATE,什么时候考虑 PARALLEL 提示?
我知道这个问题听起来可能太愚蠢了,但我一直不明白这部分。
SQL*Plus 适用于 SQL 和 PL/SQL。我如何知道某些代码是 SQL 还是 PL/SQL?如果我的代码有一个 for 循环,它不再是 SQL 了吗?
PL/SQL 是 SQL 的扩展,具有循环、条件等。那么任何 SQL 代码都是默认的 PL/SQL 代码?不是这样吗?
SQL 和 PL/SQL 之间有界限吗?
两个区分黑白 SQL 和 PL/SQL 的例子触发了这个问题:
https://stackoverflow.com/questions/2267386/oracle-11g-varray-of-objects/2267813#2267813
是role
某个privilege
s的集合吗?
一个)
SQL> CREATE TABLE xml_tab1(poDoc XMLTYPE);
Table created.
SQL> desc xml_tab1;
Name Null? Type
----------------------------------------- -------- ----------------------------
PODOC PUBLIC.XMLTYPE
b)
SQL> CREATE TABLE xml_tab2 of XMLType;
Table created.
SQL> desc xml_tab2;
Name Null? Type
----------------------------------------- -------- ----------------------------
TABLE of PUBLIC.XMLTYPE
来自这里的代码。
在第一个中,我们正在创建一个类型为 的列XMLTYPE
。第二个是做什么的?我什么时候应该使用第一个或第二个?
在 SQL*Plus 提示符下,两者Rem
和都--
可以作为注释指示符:
Rem this is a comment
-- this is also a comment
create table emp (
id number primary key,
name cvarchar2(40));
两种评论技术之间有什么区别吗?
SQL> desc dual
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SQL> select 4*5 from dual;
4*5
----------
20
SQL>
我觉得真的很奇怪。如果对偶中没有名为 4*5 的列,那么 select 语句是如何工作的?
另外,为什么我在创建自己的双表时看不到相同的行为?
SQL> create table dual2(dummy varchar2(1));
Table created.
SQL> desc dual2
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SQL> select 4*5 from dual2;
no rows selected
SQL>