posted by 구름너머 2006. 4. 20. 17:38

이를 실행 시는 다음과 같은 error 가 발생하며 pro*c, pro*cobol 에서 bind
variable 을 이용해서 table 이나 view 를 create 하지 못한다.

ORA-01027: bind variables not allowed for data definition operations

in "create view dyn2 as select * from emp where ename=:v1..."
in line 85 of pgh.pc.

이 경우 EXEC SQL CREATE TABLE IMAGE
(EMPNO NUMBER(4) NOT NULL, BITMAP LONG RAW)
END-EXEC.
이 처럼 create 해야 한다.

'ORACLE' 카테고리의 다른 글

sysdate 활용방법  (0) 2006.04.21
테이블의 필드명 변경하기  (0) 2006.04.20
무한로우 생성 쿼리  (0) 2006.04.20
TO_CHAR 함수 사용시 주의점!!!  (0) 2006.04.11
strncmp  (0) 2006.02.03
posted by 구름너머 2006. 4. 20. 09:27
Tom Kyte 글 답변중에 좋은 팁이 있어 글을 올립니다.

무한로우 생성 쿼리 입니다.

Oracle 9i 일 경우
SQL>select * from
(select level from dual connect by level <= 10);


Oracle 10g 일 경우,
SQL>select level from dual connect by level <= 10

원하는 rows 만큼 level <= ? 숫자를 넣어주세요.

이 쿼리는 상당히 유용합니다. 즉 예전에 copy_t 테이블로 사용하던

달력테이블이던지, 테이블을 가공할때 편합니다.

'ORACLE' 카테고리의 다른 글

테이블의 필드명 변경하기  (0) 2006.04.20
ORA-01027  (0) 2006.04.20
TO_CHAR 함수 사용시 주의점!!!  (0) 2006.04.11
strncmp  (0) 2006.02.03
& 기호 이용하기  (1) 2006.01.20
posted by 구름너머 2006. 4. 11. 13:59

숫자를 문자로 변환시

발생할 수 있는 문제가 있어서 올려 봅니다.

예전에 실수를 했었는데 잊고서 또 반복을 하네요....^^

오라클 함수 중에 단일행 변환함수 to_char가 있는데

그 중에서 숫자를 문자로 변경시 주의할 것이 있습니다.

to_char(숫자, 포맷) 이런 형태로 사용하게 되는데...

3자리이내의 숫자를 앞에 0을 붙여서 문자 3바이트로 만들고자 합니다.

아래의 예를 보면서 차이점을 구분해 보세요.

SELECT '*'||TO_CHAR(10,'000') as amt1,
'*'||to_char(-10,'000') as amt2,
'*'||to_char(+10,'000') as amt3,
'*'||trim(to_char(10,'000')) as amt4,
'*'||ltrim(to_char(10,'000')) as amt5
FROM DUAL;

결과:

AMT1AMT2AMT3AMT4AMT5
* 010*-010* 010*010*010

즉, 앞에 부호용 자리가 있기때문에 음수일 경우는 -를 붙이지만,

양수일 경우는 비록 +를 표시하였더라도 무시하고 스페이스로 되는군여..

따라서 꼭 트림처리를 해주어야 합니다.

LTRIM이나 TRIM이나 둘 중에 하나..^^

'ORACLE' 카테고리의 다른 글

ORA-01027  (0) 2006.04.20
무한로우 생성 쿼리  (0) 2006.04.20
strncmp  (0) 2006.02.03
& 기호 이용하기  (1) 2006.01.20
오라클에서 컬럼 Comments 조회하기.  (0) 2005.12.22
posted by 구름너머 2006. 2. 3. 17:15
#include <string.h>
int strncmp( const char *str1, const char *str2, size_t count );

사용법은 다음과 같다.

str1에서 count만큼의 문자열을 str2와 비교해서 리턴값이같으면 0,

음수면 str1이 str2보다 작은경우,

양수이면 str1이 str2보다 크다는 소리이다.

예>

char test[]="korea";

if( strncmp(test, "kor" , 3) ==0){

printf("test의 앞 3자는 kor로 시작한다");

}

'ORACLE' 카테고리의 다른 글

무한로우 생성 쿼리  (0) 2006.04.20
TO_CHAR 함수 사용시 주의점!!!  (0) 2006.04.11
& 기호 이용하기  (1) 2006.01.20
오라클에서 컬럼 Comments 조회하기.  (0) 2005.12.22
sqlplus에서 한줄로 조회하기  (2) 2005.12.19
posted by 구름너머 2006. 1. 20. 18:59
& 기호 이용하기

1. 첫번째 방법
SELECT 'You '||Chr(38)||' Me' FROM DUAL;

2. 두번째 방법(sqlplus에서)
SET DEFINE OFF
SELECT 'You & me' FROM DUAL;

3. TOAD 에서는

View-Options..-SQL Editor- 중간쯤에

Scan statements for bound variables before execution을 체크 하면 됩니다.

'ORACLE' 카테고리의 다른 글

TO_CHAR 함수 사용시 주의점!!!  (0) 2006.04.11
strncmp  (0) 2006.02.03
오라클에서 컬럼 Comments 조회하기.  (0) 2005.12.22
sqlplus에서 한줄로 조회하기  (2) 2005.12.19
날자함수의 버그인가?  (0) 2005.12.08
posted by 구름너머 2005. 12. 22. 15:40
--COMMENTS
SELECT B.COLUMN_ID, B.COLUMN_NAME, A.COMMENTS,
decode(b.data_type,'FLOAT',b.data_type,'DATE',b.data_type,B.DATA_TYPE||'('||decode(b.data_precision,null,B.DATA_LENGTH,b.data_precision)||')') TYPES,
DECODE(B.NULLABLE,'Y','Y',B.NULLABLE) ISNULL
FROM ALL_COL_COMMENTS A,
--(SELECT * FROM cols WHERE TABLE_NAME = 'TB_MAILHOSTING') B
(SELECT * FROM all_tab_columns WHERE TABLE_NAME = :vTable_Name and owner='BILL') B
WHERE A.TABLE_NAME(+) = :vTable_Name
AND A.COLUMN_NAME(+) = B.COLUMN_NAME
AND A.owner='BILL'
ORDER BY B.COLUMN_ID

'ORACLE' 카테고리의 다른 글

strncmp  (0) 2006.02.03
& 기호 이용하기  (1) 2006.01.20
sqlplus에서 한줄로 조회하기  (2) 2005.12.19
날자함수의 버그인가?  (0) 2005.12.08
자바풀 사이즈를 조정하려면:오라클 파라미터 java_pool_size  (0) 2005.12.08
posted by 구름너머 2005. 12. 19. 19:08

db tool들을 사용하면 쉽지만

꼭 sqlplus를 사용하여야 할때가 있죠?

그런데 select 결과가 한 줄로 나오지 않는 경우 보기가 어렵습니다.

이럴때 사용하면 유용한 방법을 몇자 적어봅니다.

sqlplus의 설정을 바꿔봅시다.

1.sqlplus로 로그인 합니다.

SQL>set linesize 132 <== 한 라인에 출력하는 사이즈를 132칼럼으로 늘려줍니다. default는 80.

2. 길이가 유난히 긴 필드가 있죠?

그러면 위 1번 처럼 해도 안됩니다.

이럴땐 아래와 같이 사용해 보세요.

만약 그 필드 이름이 user_name이라고 하면

SQL>column user_name format a15 <== user_name 필드를 15자리로 표현하고 넘을 경우는

다음줄로 표시됩니다. 사이즈를 조정하면 되겠죠?

3. 위 설정을 매번 로그인시마다 하기가 귀찮으면

login.sql에 위 명령어들을 기술하고 저장한 뒤

로그인 해보세요.

posted by 구름너머 2005. 12. 8. 15:41

select to_char((to_date('20051201191733','yyyymmddhh24miss') -
to_date('20051201191724','yyyymmddhh24miss'))*24*60*60) as t
from dual

날자함수를 이용하여 초를 계산하려고 합니다.

그런데 위의 경우에 계산 오차가 있는듯합니다.

9가 정확히 나와야 하는데

9.00000000000000000000000000000000000003

이렇게 나옵니다.......ㅠㅠ!

lpad(숫자,7,'0') 으로 실행하면 위의 경우에

lpad가 안 먹힙니다.

고수님들의 한수 부탁합니다.

select lpad((to_date('20051201191733','yyyymmddhh24miss') -
to_date('20051201191724','yyyymmddhh24miss'))*24*60*60,7,'0') as t
from dual

to_char는 값을 찍어보기 위함이며,

위 sql을 실행시 값이 아래와 같이 나옵니다.

9.00000

원인은 날짜 계산시 정수값이 안나와서 그렇습니다.

제대로 나로려면

0000009 이렇게 나와야 합니다.

해결방법은 나머지를 버리는 trunc로 씌우면 되는데

to_date 날자변환시의 버그이지 않을까해서 ^^