사업왕이 커가는곳


오라클은 널너리가 좋다고 해야 하나.. 어렵다고 해야하나...
예를 들어 ""을 Varchar2 자료 형에 넣으면 널로 인식한다. MSsql설계할때는 왼만하면 널 허용 안하는걸로 작업을 했는데 이렇게 하니까. "" 문자의 입력시 너무 어려움이 많아서 그냥 널 허용으로 다 바꾸었다.
그리고 가지고 와서 쓸때는 .toString  를 달아 주기만 하면 된다. 오류없이...
문제는 숫자 형인데.. ""를 숫자 형에 넣어 버리면 널로 인식 하는것이 아니라 타입 오류를 발생 시킨다.
그것 때문에 ""인지 확인해서 디비널을 반환하는 함수를 만들어서 사용하였다. ㅜㅜ
이쯤 하니까 거의 비슷해 진것 같다.
프로시져를 사용하지 않아서 좀 불편하긴 한데.. 만들어 놓으면 나중에 관리가 더 힘들 것 같아서
CommandType.Text 로 작업하는게 낳을듯 하다..

오라클... MS-sql에 비해서 성능이 좋아 보이긴 하다.. 아직은 느낌이다... 나중에 검증도 할 수 있을지는 모르겠다. ㅡㅡ;
지금까지 사용한. 함수를 몇가지 정리하자면

함수
ISNULL(검사할 열, 대체값) -> nvl(검사할 열, 대체값) 
GETDATE() -> sysdate
DATEADD(m, 1, 날짜) -> add_months(날짜, 1)
CONVERT(VARCHAR(20), GETDATE(), 120) -> to_Char(sysdate, 'YYYY-MM-DD HH24:MI:SS')

아래는 Select 한 쿼리를 DataAdapter를 이용해서 받아온후 Listview를 채우는 예다.

#Region " 리스트 호출"

    ''' <summary>
    ''' 리스트 가져오기
    ''' 검색 조건에 따라 사용자 목록 가지고 오기
    ''' </summary>
    ''' <param name="lvListItem"></param>
    ''' <remarks></remarks>
    Private Sub lfnUpdateList(ByVal lvListItem As ListView, ByVal intSelectedIdx As Integer)
        Dim intSelectedIndex As Integer = -1
        Me.Cursor = Cursors.WaitCursor

        '// 테이블만 체우기
        Try

            '// 사원번호, 아이디, 사용자명, 권한레벨, 로그인허용, 등록일, 메모
            cmdSQL.CommandType = CommandType.Text
            cmdSQL.CommandText = ""
            cmdSQL.CommandText &= "SELECT "
            cmdSQL.CommandText &= "     A.UserIdx, A.UserName, A.UserID, A.EmployeeNumber, A.PermLevel, A.PermAdminTF, A.PermLoginTF, A.RegDate, A.EtcMemo, "
            cmdSQL.CommandText &= "     B.StatusCode, B.StatusText "
            cmdSQL.CommandText &= "FROM "
            cmdSQL.CommandText &= "     TB_User A "
            cmdSQL.CommandText &= "         INNER JOIN TB_User_Status B ON A.StatusCode = B.StatusCode "
            cmdSQL.CommandText &= "WHERE  "
            cmdSQL.CommandText &= "     A.DeleteTF = '0'  "
            If cboStatus.SelectedIndex > 0 Then cmdSQL.CommandText &= "AND A.StatusCode = :StatusCode "

            ' 파라메터 선언할때는 순서가 중요하다 사용하는 순서대로 선언을 해야만 그 겂이 정확히 들어 가게 된다.
            With cmdSQL.Parameters
                .Clear()
                If cboStatus.SelectedIndex > 0 Then .Add(":StatusCode", OleDbType.varchar).Value = DF.fnCtypeCodeItems(cboStatus.SelectedItem).CodeData
            End With

            da.SelectCommand = cmdSQL

            strConn.Open()
            dtDataTable.Rows.Clear()
            da.Fill(dtDataTable) ' dtDataTable 수정
        Catch ex As Exception
            fnErrorReport(Me.Text, ex)
        Finally
            Me.Cursor = Cursors.Default
            strConn.Close()
        End Try

        Try
            Me.Cursor = Cursors.WaitCursor

            lvListItem.BeginUpdate()
            isListUpdating = True
            lvListItem.Items.Clear()

            '// 사원번호, 아이디, 사용자명, 권한레벨, 로그인허용, 등록일, 메모
            '// UserIdx, UserName, UserID, UserEmployeeNumber, PermLevel, PermAdminTF, PermLoginTF, RegDate, EtcMemo, B.StatusCode, B.StatusText
            If dtDataTable.Rows.Count > 0 Then
                For Each drItem As DataRow In dtDataTable.Rows
                    With lvListItem.Items.Add(drItem("EmployeeNumber"), 0)  '0
                        .UseItemStyleForSubItems = False
                        .ImageIndex = IIf(drItem("StatusCode") = "A", 4, 6)
                        .Tag = drItem("UserIdx")

                        .SubItems.Add(drItem("UserID")) '1
                        .SubItems.Add(drItem("UserName")) '2
                        .SubItems.Add(IIf(CBool(drItem("PermAdminTF")) = True, "팀장", drItem("PermLevel"))) '3
                        .SubItems.Add(IIf(CBool(drItem("PermAdminTF")) = True, "허용", IIf(CBool(drItem("PermLoginTF")) = True, "허용", "차단"))) '4
                        .SubItems.Add(CDate(drItem("RegDate")).ToString("yyyy-MM-dd")) '1
                        .SubItems.Add(drItem("EtcMemo").ToString)

                        If drItem("UserIdx") = intSelectedIdx Then intSelectedIndex = .Index
                    End With
                Next
            End If
            isListUpdating = False
            lvListItem.EndUpdate()

            '// 항목 재 선택
            If intSelectedIndex >= 0 Then
                lvListItem.Items(intSelectedIndex).Selected = True
                lvListItem.Items(intSelectedIndex).EnsureVisible()
            End If

            '// 레이블 표시
            lblStatus3.Text = "검색:" & lvList.Items.Count & ""
        Catch ex As Exception
            fnErrorReport(Me.Text, ex)
        Finally
            Me.Cursor = Cursors.Default
            strConn.Close()
        End Try
    End Sub

#End Region