GUI sin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
--USE [TempTable]
--GO
/****** Object:  UserDefinedFunction [dbo].[fn_GetFileInfoInFullPathUsingXml]    Script Date: 2017-01-17 오후 1:43:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-----------------------------------------------------------------------------------------------------------
--  파일경로에서 파일정보 가져오기
--  파일경로 문자열에서 파일명,경로,확장자가지오기(filepath:경로,filename:파일명,extension:확장자)
--  예: SELECT 데이터베이스명.소유자명.fn_GetFileInfoInFullPathUsingXml('filename','test.xml','/')
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('filename','c:/dkdk/test.xml','/')
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('filepath','c:/dkdk/test.xml','/')
--  SELECT  dbo.fn_GetFileInfoInFullPathUsingXml('extension','c:/dkdk/test.xml','/')
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
-- 프로시저 생성
-----------------------------------------------------------------------------------------------------------
 
ALTER FUNCTION     [dbo].[fn_GetFileInfoInFullPathUsingXml]
(
    @iGubun         NVARCHAR(10),   -- filepath:경로,filename:파일명,extension:확장자
    @iFullPath      NVARCHAR(MAX),
    @iDelimiter     NVARCHAR(10)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
 
 
    DECLARE @wTblSplit AS TABLE
    (
         Seq        INT     IDENTITY(1,1),
         Fragment   NVARCHAR(MAX)
    )
    DECLARE @wFileInfo  NVARCHAR(MAX)
    DECLARE @wXml       XML
    DECLARE @wMax       INT
 
    SELECT  @wFileInfo  = ''
    SELECT  @wMax       = 0
    SET     @wXml       = N'' + REPLACE(@iFullPath, @iDelimiter,''+ ''
 
    INSERT  INTO @wTblSplit(Fragment)
    SELECT  r.value('.','NVARCHAR(MAX)') as item
    FROM    @wXml.nodes('//root/r') as records(r)
 
    SELECT  @wMax   = MAX(Seq) FROM @wTblSplit
    IF  @iGubun = 'filepath'
    BEGIN
        IF  @wMax   = 1
        BEGIN
            SELECT  @wFileInfo = '.'
        END
        ELSE
        BEGIN
            SELECT  @wFileInfo  = COALESCE(@wFileInfo + @iDelimiter + Fragment, Fragment)
            FROM    @wTblSplit
            WHERE   Seq         < @wMax
            ORDER BY Seq
 
            SELECT  @wFileInfo  = SUBSTRING(@wFileInfo,2,LEN(@wFileInfo)) + '/'
        END
    END
    ELSE IF @iGubun = 'filename'
    BEGIN
        SELECT  @wFileInfo = Fragment FROM @wTblSplit WHERE Seq = @wMax
        SELECT  @wFileInfo = SUBSTRING(@wFileInfo,1,CHARINDEX('.',@wFileInfo))
    END
    ELSE IF @iGubun = 'extension'
    BEGIN
        SELECT  @wFileInfo = Fragment FROM @wTblSplit WHERE Seq = @wMax
        SELECT  @wFileInfo = SUBSTRING(@wFileInfo,CHARINDEX('.',@wFileInfo)+1,LEN(@wFileInfo)-CHARINDEX('.',@wFileInfo))
    END
 
    RETURN LTRIM(RTRIM(@wFileInfo))
 
END
cs


11

http://rocabilly.tistory.com/88 에 있던걸 extension 부분만 수정했다.

aaa.bbb.ccc.jpg 처럼 dot('.')이 여러개일경우 오류가 발생할수 있다.

Comment +0

1
2
3
4
  SELECT A.TABLE_NAME, B.COMMENTS
    FROM ALL_TABLES A, ALL_TAB_COMMENTS B
   WHERE A.TABLE_NAME = B.TABLE_NAME AND A.TABLE_NAME LIKE :table_name || '%'
ORDER BY A.TABLE_NAME
cs

종종 사용하는데 쓸때마다 잊어서 메모해놓자.


Comment +0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  SELECT COLUMN_ID AS SEQ,
         (SELECT NVL (D.POSITION, '')
            FROM ALL_CONS_COLUMNS D, all_constraints E
           WHERE     D.OWNER = UPPER ( :user_name)
                 AND D.OWNER = A.OWNER
                 AND D.TABLE_NAME = A.TABLE_NAME
                 AND D.COLUMN_NAME = A.COLUMN_NAME
                 AND D.OWNER = E.OWNER
                 AND D.TABLE_NAME = E.TABLE_NAME
                 AND D.CONSTRAINT_NAME = E.CONSTRAINT_NAME
                 AND E.CONSTRAINT_TYPE = 'P')
            AS PK,
         (SELECT CASE WHEN D.POSITION IS NULL THEN '' ELSE 'V' END
            FROM ALL_CONS_COLUMNS D, all_constraints E
           WHERE     D.OWNER = UPPER ( :user_name)
                 AND D.OWNER = A.OWNER
                 AND D.TABLE_NAME = A.TABLE_NAME
                 AND D.COLUMN_NAME = A.COLUMN_NAME
                 AND D.OWNER = E.OWNER
                 AND D.TABLE_NAME = E.TABLE_NAME
                 AND D.CONSTRAINT_NAME = E.CONSTRAINT_NAME
                 AND E.CONSTRAINT_TYPE = 'R')
            AS FK,
         A.COLUMN_NAME AS COLUMN_ID,
         C.COMMENTS,
         A.DATA_TYPE,
         A.DATA_LENGTH,
         A.NULLABLE,
         A.DATA_DEFAULT
    FROM ALL_TAB_COLUMNS A, ALL_TAB_COMMENTS B, ALL_COL_COMMENTS C
   WHERE     A.OWNER = UPPER ( :user_name)
         AND B.OWNER = UPPER ( :user_name)
         AND C.OWNER = UPPER ( :user_name)
         AND A.OWNER = B.OWNER
         AND A.OWNER = C.OWNER
         AND A.TABLE_NAME = B.TABLE_NAME
         AND A.TABLE_NAME = C.TABLE_NAME
         AND A.COLUMN_NAME = C.COLUMN_NAME
         AND A.TABLE_NAME = UPPER ( :table_name)
ORDER BY 1
 
cs

MSSQL은 어떻게 할까나...


Comment +0

한글 위키 : http://bit.ly/28O4arH


영문 위키 : http://bit.ly/28O4red



이렇게 보니 반갑네.

Comment +0



Row changed between retrieve and update 이와같은 오류가 발생하는 이유는 여러가지가 있겠지만, 특히 dw의 Specify Update Properties와 밀접한 관계가 있고 대부분의 경우는 dw 컬럼의 data type의 길이와 db의 컬럼의 datatype의 길이가 다르기 때문일 가능성이 크다.



위의 화면을 보면 AF0502D Table이 Update/Delete가 발생하면 Updateable Columns의 컬럼들을 가지고 SQL의 Where 조건을 만들어주는데 remark 컬럼이 db의 varchar2(200)보다 작게 60으로 잡혀 있었다.


2018-12-17

어디선가 DataWindows의 Table을 Delete 하고,

해당 Table을 Update 하면 이런 문제가 발생될수도 있다.


Comment +0

2018.02.26 추가

해결방법이 나와서 새글을 포스팅 하도록 하겠습니다. https://guisin.net/136




윈도우 8.1까진 해결 가능한 업데이트가 나와있는데, 윈도우 10은 아직나와있지 않다.(2015.08.19 기준)

 .hlp 파일을 열려고 하면 확장자가 연결이 안된것처럼 나오거나, 엣지 브라우저가 열려버린다.





그래서 여기저기 알아보니까,

WINHLP32 - Do we have to go through this again? 란 문서를 찾았고, 그안에 임시적인 해결방법이 나와있다.


winhlp32-windows-10-x86-x64-komeil.rar

(내가 윈도우10에 맞게 cmd 파일을 수정한 버전이다. 원본 : 다운로드)


압축을 풀고 install.cmd 파일에 마우스 오른쪽 버튼을 누르고 관리자 권한으로 실행 해주면 설치가 된다.


이제 hlp 파일이 열리는데 또다은 문제가 발생했다. 내가 자주 사용하는 PowerBuilder 에서 명령문을 선택(블럭)하고 Shift + F1 키를 눌러도 색인 검색이 되지 않는다.아 짜증나.


재밋는건 윈도우10 클린설치한 PC에선 문제가 발생하지만,

윈도우7/8/8.1 에서 업데이트(KB917607)를 적용한뒤에, 윈도우10으로 자동 업그래이드 적용된 PC에선 문제가 발생하지 않는다.


관련파일

C:\Windows\winhlp32.exe

C:\Windows\ko-KR\winhlp32.exe.mui

C:\Windows\en-US\winhlp32.exe.mui


관련 레지스트리

32bit

reg add "HKLM\SOFTWARE\Microsoft\WinHelp" /v "AllowProgrammaticMacros" /t REG_DWORD /d "0x00000001" /f

reg add "HKLM\SOFTWARE\Microsoft\WinHelp" /v "AllowIntranetAccess" /t REG_DWORD /d "0x00000001" /f


64bit

reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\WinHelp" /v "AllowProgrammaticMacros" /t REG_DWORD /d "0x00000001" /f

reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\WinHelp" /v "AllowIntranetAccess" /t REG_DWORD /d "0x00000001" /f



2015.08.20 추가

오늘 또 고생해본 결과 윈도우10 출시 초기인 만큼 가장 확실하게 윈도우10을 설치하는건,

윈도우7/8/8.1을 먼저 설치하고 정확한 드라이버를 설치한 뒤에 윈도우10으로 업그래이드 하는 방법이 있겠다.

(이방법도 확실히 안되는것 같다.)






Comment +0

1. 변경을 원하는 dw object에서 마우스 오른쪽버튼을 누르고 나오는 팝업메뉴에서 Edit Source를 선택



1
2
3
4
5
6
release 10;
datawindow(units=0 timer_interval=0 color=1073741824 processing=0 HTMLDW=no print.printername="" print.documentname="" print.orientation = 0 print.margin.left = 110 print.margin.right = 110 print.margin.top = 96 print.margin.bottom = 96 print.paper.source = 0 print.paper.size = 0 print.canusedefaultprinter=yes print.prompt=no print.buttons=no print.preview.buttons=no print.cliptext=no print.overrideprintjob=no print.collate=yes hidegrayline=no grid.lines=0 grid.columnmove=no selected.mouse=no )
header(height=84 color="536870912" )
summary(height=0 color="536870912" )
footer(height=0 color="536870912" )
detail(height=84 color="536870912" )
cs


1. 두번째 줄의 processing=0 부분을 수정해주면 된다. (0 : tabular, 1 : grid)


Comment +0


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
CREATE FUNCTION [dbo].[fx_FormatUsingMask] 
(
    -- Add the parameters for the function here
    @input nvarchar(1000),
    @mask nvarchar(1000)
)
RETURNS nvarchar(1000)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result nvarchar(1000= ''
    DECLARE @inputPos int = 1
    DECLARE @maskPos int = 1
    DECLARE @maskSign char(1= ''
 
    WHILE @maskPos <= Len(@mask)
    BEGIN
        set @maskSign = substring(@mask, @maskPos, 1)
 
        IF @maskSign = '#'
        BEGIN
            set @result = @result + substring(@input, @inputPos, 1)
            set @inputPos += 1
            set @maskPos += 1
        END
        ELSE
        BEGIN
            set @result = @result + @maskSign
            set @maskPos += 1
        END
    END
    -- Return the result of the function
    RETURN @result
 
END
cs

MSSQL 버전마다 어떤지는 모르겠지만, 적당한 함수를 못찾아서 인터넷을 검색해보니 이런 녀석이 나오드라.

사용 예)
1
select dbo.fx_FormatUsingMask('201503050900''####-##-## ##:##:00')
cs




Comment +0