Oracle不認識字元串怎麼辦?
問題發現:在java中用到資料庫時,需要傳入使用者名和密碼,都是字元串的,控制台報錯,我以為是java程式寫錯了。後來在sqlplus和sql developer寫SQL語句,發現我的Oracle資料庫根本就不認識帶雙引号的字元串!
錯誤 描述:
這裡是表結構,oracle自帶的emp表
SQL> desc emp;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4)
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
如果是帶雙引号查詢,遇到字元串就會出錯:
SQL> select * from emp
2 where ename="KING";
select * from emp
where ename="KING"
ORA-00904: "KING": 辨別符無效
如果字元串是用單引号的包住的話,就不會出錯。
SQL> select * from emp
2 where ename='KING';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7839 KING PRESIDENT 1981/11/17 5000.00 10
注:這個資料庫是我新裝的,以前我裝的資料庫,貌似都是用雙引号來抱住字元串的,而不是單引号啊,由于用到jdbc程式設計,一般查詢語句都是傳入字元串,也就是String類型的進來,不可能是傳入字元數組進來的,那樣太費時費力啊!
------解決思路----------------------
會把 雙引号内的内容,當做一個字段,你這裡寫的是 "KING",他就會去找這個列,其實這列不存在,就出錯了
是以你要換成單引号。
------解決思路----------------------
别搞笑了,oracle那有什麼雙引号的字元串的說法
oracle中要表示字元串,都是把字元用單引号括起來的
如果要表示雙引号是字元串的一部分,那就字元串随後就是:‘“abc”’
------解決思路----------------------
Oracle資料庫的字元型資料都是用單引号‘’來表示的,沒有使用雙引号”“來表示字元型的值的。