亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? oracle.lisp

?? Oracle數據訪問類
?? LISP
?? 第 1 頁 / 共 3 頁
字號:
(defun column-names ()  (join "~%" (map 'list #'sqlcol-name (columns)))); GETHASH-REQUIRED; Get the value of a column - must exist if the hash table is non-empty(defun gethash-required (key hash)  (if (= 0 (hash-table-count hash))      nil    (multiple-value-bind     (val exists) (gethash (to-string key) hash)     (when (not exists) (error (cat "DO-ROWS: bound variable '" key "' does not occur in the query."                                    "~%The allowed column/variable names are:~%~%" (column-names)                                    "~%")))     val)))                       ; ROW-TO-RESULT; Convert fetched row array data to result type(defun row-to-result (row result-type)  (cond ((null row) nil)        ((eq result-type 'ARRAY) row)        ; ((eq result-type 'HASH) (pairs-to-hash (row-to-result row 'PAIRS)))        ((eq result-type 'HASH) (array-to-hash (row-to-result row 'ARRAY)))        ((eq result-type 'PAIRS)         (let ((colinfo (oracle_column_info (curconn))))           (check-success)           (cond            ((null row) nil)            (t (map 'list                    #'(lambda (col rowval)                        (list (sqlcol-name col) rowval))                    colinfo row)))))        (t (error (cat "Invalid result type '" result-type "' given - should be 'ARRAY, 'PAIRS or 'HASH"))))); CHECK-SUCCESS; Check Oracle success code after calling a function.  Assumes (check-connection) was called!(defun check-success ()  (if (not (lisp-truth (oracle_success (curconn))))      (error (oracle_last_error (curconn))))  t); Convert Oracle type based on sqlcol data type.  Oracle numerics are converted; to the appropriate internal Lisp type using READ-FROM-STRING.  NULL is retained; as Lisp NIL, and strings and dates are left as Lisp string.(defun convert-type (val sc)  (let ((dtype (sqlcol-type sc)))    (cond ((null val) nil)          ((find dtype '("NUMBER" "INTEGER" "FLOAT") :test #'equal)           (read-from-string val))          ((find dtype '("VARCHAR" "DATE" "CHAR" "VARCHAR2") :test #'equal)           val)          (t (error (cat "Unsupported data type '" dtype "'")))))); TO-SQLVAL; Return a SQL val for LISP object, handling null case(defun to-sqlval (x)  (if (null x)      (make-sqlval :data "" :is_null 1)    (make-sqlval :data (to-string x) :is_null 0))); FROM-SQLVAL; Return Lisp Object (string or NIL) for SQL val, handling null case(defun from-sqlval (x)  (if (lisp-truth (sqlval-is_null x))      nil    (sqlval-data x))); ROWVAL; Return string value of an SQLVAL (row value), or "" if null(defun rowval (row) (if (= 0 (sqlval-is_null row))                        (sqlval-data row)                      nil)); HASH-TO-SQLPARAM-ARRAY; Convert a hash table map of name->value strings to an array of SQL; bind params suitable for passing to ORACLE_EXEC_SQL(defun hash-to-sqlparam-array (h)  (if (null h) (setf h (make-hash-table :test #'equal)))  (let* ((count (hash-table-count h))         (result (make-array count))         (i 0))    (loop for key being the hash-keys of h do          (let ((val (gethash key h)))            (when (not (atom key))                  (error "Non-atom parameter name in bind-parameter hash"))            (when (not (atom val))                  (error "Non-atom parameter value in bind-parameter hash"))            (setf (aref result i) (make-sqlparam :name (to-string key) :value (to-sqlval val)))            (incf i)))    result)); CHECK-CONNECTION; Check we are connected before doing an operation that requires a connection(defun check-connection (&optional action)  (if (null (curconn))      (error (cat "Attempt to "                  (if-null action "perform database operation")                  " when not connected to any database")))); CONNECTION-KEY; Construct key suitable for use in hash table keyed on; unique triple of (user, schema, server)(defun connection-key (user schema server)  ; Use ~-delimited string - pretty disgusting, eh?  (cat (string-upcase user) "~" (string-upcase schema) "~" (string-upcase server))); PAIRS-TO-HASH; Convert a list of pairs ((key1 val1) (key2 val2) ...) to hash, enforcing key uniqueness(defun pairs-to-hash (plist)  (if (null plist)      nil    (let ((result (make-hash-table :test #'equal)))      (loop for p in plist do            (let ((key (string-upcase (to-string (first p))))                  (value (second p)))              (when (not (valid-symbol key)) (error (cat "Column or parameter '" key "' is not a valid Lisp symbol name."                                                         "~%Consider using SELECT ... " key " AS <column alias>")))              ; Check uniqueness              (multiple-value-bind                (curval already-there) (gethash key result)               (when already-there (error (cat "Column or parameter '" key                                               "' appears twice in list of (name, value) pairs,~%first with value '"                                               curval "' and again with value '" value "'.  Columns/parameters given were:~%"                                               (join "~%" (map 'list #'car plist))                                               (nl)))))              (setf (gethash key result) value)))      result))); CHECK-PAIRS; Convert pairs to hash if needed(defun check-pairs (p)  (cond ((null p) (make-hash-table :test #'equal))        ((eq (type-of p) 'HASH-TABLE) p)        ((eq (type-of p) 'CONS) (pairs-to-hash p))        (t (error (cat "Invalid type for name -> value map: '" (type-of p) "' - should be hash or list of pairs."))))); COMMA-LIST-OF-KEYS; Return keys of hash table as comma-separated list.  If flag given,; also pre-pend a colon to the name(defun comma-list-of-keys (h &optional (colon nil))  (let ((result "")        (plural nil))    (loop for hkey being each hash-key of h do          (if plural              (setf result (cat result ", "))            (setf plural t))          (when colon (setf result (cat result ":")))          (setf result (cat result hkey)))    result)); IS-SELECT-QUERY; Examine string to see if it begins with "SELECT".  Useful to auto-detect; the mode (SELECT vs. non-SELECT for executing statements.(defun is-select-query (s)  (let ((start (string-trim '(#\Space #\Tab #\Newline) (string-upcase s))))    (equal "SELECT" (subseq start 0 6)))); =-=-=-=-=-=-=-   C WRAPPER FUNCTIONS  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; CONNECT(def-call-out oracle_connect (:arguments (user           c-string)                                         (schema         c-string)                                         (password       c-string)                                         (server         c-string)                                         (prefetch_bytes int)                                         (auto_commit    int))                             (:return-type c-pointer)); DISCONNECT(def-call-out oracle_disconnect (:arguments (db c-pointer))                                (:return-type int  )); RUN SQL(def-call-out oracle_exec_sql (:arguments (db         c-pointer)                                          (sql        c-string)                                          (params     (c-array-ptr (c-ptr sqlparam)))                                          (is_command int))                              (:return-type int)); NO. OF COLUMNS(def-call-out oracle_ncol (:arguments (db c-pointer))                          (:return-type int)); COLUMN INFO(def-call-out oracle_column_info (:arguments (db c-pointer))                                 (:return-type (c-array-ptr (c-ptr sqlcol)))); FETCH(def-call-out oracle_fetch_row (:arguments (db c-pointer))                               (:return-type int)); EOF(def-call-out oracle_eof (:arguments (db c-pointer))                         (:return-type int)); SUCCESS(def-call-out oracle_success (:arguments (db c-pointer))                             (:return-type int)); ROW VALUES(def-call-out oracle_row_values (:arguments (db c-pointer))                                (:return-type (c-array-ptr (c-ptr sqlval)))); NO. ROWS AFFECTED(def-call-out oracle_rows_affected (:arguments (db c-pointer))                                   (:return-type int)); COMMIT(def-call-out oracle_commit (:arguments (db c-pointer))                            (:return-type int))(def-call-out oracle_rollback (:arguments (db c-pointer))                              (:return-type int))(def-call-out oracle_set_auto_commit (:arguments (db c-pointer)                                                 (auto_commit int))                                     (:return-type int)); ERROR(def-call-out oracle_last_error (:arguments (db c-pointer))                                (:return-type c-string)); =-=-=-=-=-=-=-   LOW LEVEL UTILITY FUNCTIONS  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; IF-NULL; Default a null value.  Is there a better Lisp built-in for this?(defun if-null (value default) (if (null value) default value)); AREF-NULL; Do an AREF, but allow array to be null, in which case return NIL(defun aref-null (a i) (if (null a) nil (aref a i))); HASH-COMBINE; Combine two hash table.  Keys of the second hash will overwrite.(defun hash-combine (h1 h2)  (cond ((null h1) h2)        ((null h2) h1)        (t (loop for hkey being each hash-key of h2 do                 (setf (gethash hkey h1)                       (gethash hkey h2)))           h1))); VALID-SYMBOL; Test whether string is a valid Lisp symbol name(defun valid-symbol (x)  (equal (string-upcase (to-string x))         (to-string (read-from-string x)))); TO-STRING; Convert object to a string; NIL -> ""(defun to-string (s)  (cond ((null s) "")        ((stringp s) s)        ((symbolp s) (symbol-name s))        (t (format nil "~A" s)))); CAT; Concatenate strings(defun cat (&rest args)   (apply #'concatenate 'string (mapcar #'to-string (flatten args)))); ARRAY-TO-HASH; Convert array of row values to hash using column info(defun array-to-hash (row)  (if (null row)      nil    (let* ((cols (columns))           (n (length row))           (result (make-hash-table :test #'equal :size n)))      (loop for i from 0 to (- n 1) do            (setf (gethash (to-string (sqlcol-name (aref cols i))) result) (aref row i)))      result))); CHECK-UNIQUE-ELEMENTS; Does list consist of unqiue, non-null elements(defun check-unique-elements (l)  (let ((h (make-hash-table :test #'equal)))    (dolist (elt l)            (when (null elt)                  (error "Null element in column/variable list"))            (when (gethash (to-string elt) h)                  (error (cat "DO-ROWS: Parameter/column '" elt "' occurs more than once in bound columns/variables:~%"                              (join "~%" l))))            (setf (gethash (to-string elt) h) t))    t)); JOIN; Join a sequence of strings into one, separating with delimeter; I'll probably get shot for this implementation.  Better way?(defun join (delimiter seq)  (let ((result ""))    (loop for i from 0 to (- (length seq) 1) do          (when (> i 0)                (setf result (cat result delimiter)))          (setf result (cat result (nth i seq))))    result)); WHILE (macro); While loop construct (lifted from Paul Graham)(defmacro while (test &body body)  `(do ()       ((not ,test))     ,@body)); OUT; Output functions(defun out (&rest args)  (format t "~A" (cat args))); OUT-NL(defun out-nl (&rest args)  (out args)  (terpri)); LISP-TRUTH; Get Lisp truth of object, considering "C" 0/1 also.  Useful for; taking booleans returned from "C"(defun lisp-truth (x)  (if (eq x 0) nil (not (null x)))); C-TRUTH; Get "C" truth of object (0 or 1).  Useful for passing args to "C"(defun c-truth (x)  (if (lisp-truth x) 1 0)); FLATTEN; Flatten list (lifted from Paul Graham)(defun flatten (x)  (labels ((rec (x acc)             (cond ((null x) acc)                   ((atom x) (cons x acc))                   (t (rec (car x) (rec (cdr x) acc))))))    (rec x nil))); NL; Return newline(defun nl () (format nil "~%")); End of oracle.lisp

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一区中文| 在线视频一区二区免费| 亚洲欧洲99久久| 日韩一区二区在线观看| 一本到不卡精品视频在线观看| 麻豆精品国产91久久久久久| 一区二区成人在线视频| 国产精品传媒在线| 精品av久久707| 欧美一级一级性生活免费录像| 95精品视频在线| 国产成人啪午夜精品网站男同| 婷婷亚洲久悠悠色悠在线播放 | 成人午夜精品在线| 久久精品国产成人一区二区三区| 亚洲综合网站在线观看| 亚洲一区二区在线免费看| 中文字幕亚洲在| 中文字幕乱码久久午夜不卡| 日韩一区二区三区av| 欧美日免费三级在线| 欧美精品亚洲一区二区在线播放| 成人做爰69片免费看网站| 懂色av一区二区三区蜜臀| 精品一区二区三区免费毛片爱| ...av二区三区久久精品| 国产精品久久久久永久免费观看| 久久一区二区三区四区| 欧美一区二区三区小说| 日韩欧美亚洲国产另类| 欧美精品一区二区三区高清aⅴ| 日韩欧美中文一区二区| 精品免费一区二区三区| 26uuu亚洲综合色欧美| 久久久精品tv| 综合婷婷亚洲小说| 亚洲人成人一区二区在线观看| 亚洲精品久久嫩草网站秘色| 亚洲午夜日本在线观看| 五月天久久比比资源色| 精品在线你懂的| 国产盗摄一区二区| 欧美亚洲一区二区在线| 91精品欧美久久久久久动漫 | 亚洲成人一区二区| 日韩电影免费在线观看网站| 精品一区二区三区不卡| 肉肉av福利一精品导航| 国产一区二区三区免费| 91在线一区二区三区| 欧美高清hd18日本| 久久综合999| 亚洲色图.com| 蜜桃视频在线观看一区| 国产凹凸在线观看一区二区| 日本高清视频一区二区| 欧美一区二区播放| 亚洲欧洲另类国产综合| 亚洲成av人片一区二区梦乃| 成人午夜激情片| 日韩精品中午字幕| 香港成人在线视频| 在线观看亚洲一区| 亚洲免费观看在线观看| 成人av网站在线| 久久精品一区二区三区不卡| 日韩不卡一二三区| 884aa四虎影成人精品一区| 中文字幕在线不卡视频| 成人午夜视频在线| 欧美激情资源网| 国产91在线观看丝袜| 久久久久久久久久久久电影 | 中文字幕一区二区不卡| 丁香六月综合激情| 久久精品人人做人人爽97| 精品中文av资源站在线观看| 欧美大肚乱孕交hd孕妇| 久久91精品国产91久久小草| 日韩午夜在线影院| 国产在线精品免费av| 26uuu另类欧美| 国产91精品一区二区麻豆亚洲| 久久精品一二三| 国产成人福利片| 最好看的中文字幕久久| 在线观看成人免费视频| 亚洲一区二区三区四区在线免费观看 | 欧美高清你懂得| 青青草一区二区三区| 欧美日韩亚洲综合一区二区三区| 亚洲成av人综合在线观看| 91精品国产91热久久久做人人| 免费成人在线视频观看| 久久嫩草精品久久久精品 | 中文字幕av资源一区| 成人av资源站| 亚洲综合色丁香婷婷六月图片| 欧美少妇一区二区| 国产一区二区三区电影在线观看| 国产日韩在线不卡| 欧美亚洲国产一区二区三区va| 毛片不卡一区二区| 国产嫩草影院久久久久| 在线免费观看视频一区| 另类人妖一区二区av| 国产精品久久精品日日| 欧美色电影在线| 国产毛片精品国产一区二区三区| 国产精品电影院| 在线电影院国产精品| 国产一区二区精品久久99| 亚洲视频在线观看一区| 欧美高清你懂得| 91欧美激情一区二区三区成人| 爽爽淫人综合网网站| 中文字幕第一区| 精品国产欧美一区二区| 欧洲在线/亚洲| 国产成人综合精品三级| 性做久久久久久| 国产精品黄色在线观看| 制服丝袜激情欧洲亚洲| aaa亚洲精品| 国内精品国产三级国产a久久| 亚洲欧美国产三级| 国产欧美一区二区精品久导航| 欧美色倩网站大全免费| 91原创在线视频| 国内不卡的二区三区中文字幕| 亚洲一区二区av在线| 日本一区二区三区国色天香| 欧美日韩日日摸| 色综合久久精品| 成人h版在线观看| 国产精品一区二区久久不卡 | 国内精品免费**视频| 亚洲成人免费视频| 亚洲小说春色综合另类电影| 国产精品传媒入口麻豆| 欧美国产丝袜视频| 精品国产免费人成在线观看| 欧美精品一级二级| 欧美三级韩国三级日本三斤| 日本乱码高清不卡字幕| av电影天堂一区二区在线| 国产河南妇女毛片精品久久久 | 久久99在线观看| 日韩影院免费视频| 午夜精品福利视频网站| 亚洲高清不卡在线观看| 亚洲国产欧美在线| 午夜av一区二区| 日韩电影免费在线看| 免费日本视频一区| 激情综合五月婷婷| 国产精品一区久久久久| 风间由美一区二区av101| av资源网一区| 一本久久a久久精品亚洲| 色哟哟一区二区在线观看| 日本韩国一区二区三区视频| 在线视频中文字幕一区二区| 欧美日韩免费观看一区二区三区| 色婷婷久久久综合中文字幕| 日本久久精品电影| 4438x成人网最大色成网站| 欧美一卡2卡3卡4卡| 精品国产sm最大网站| 日本一区二区三级电影在线观看 | 欧美日韩精品一区二区三区蜜桃 | 成人成人成人在线视频| 一本大道久久a久久综合| 欧美亚男人的天堂| 日韩欧美亚洲国产另类| 久久久久久久网| 亚洲免费观看高清在线观看| 亚洲国产日日夜夜| 美女精品一区二区| 成人免费视频网站在线观看| 在线观看亚洲专区| 日韩一级黄色大片| 国产欧美精品区一区二区三区 | 久久综合九色综合97_久久久| 欧美国产精品专区| 亚洲自拍与偷拍| 国产精品亚洲а∨天堂免在线| 波多野结衣91| 在线综合视频播放| 国产欧美日韩另类视频免费观看| 一区二区三区四区视频精品免费| 日韩电影在线看| av电影天堂一区二区在线| 欧美一区二区在线不卡| 中文成人综合网| 日韩激情视频在线观看| www.欧美亚洲| 精品成人a区在线观看| 亚洲成人1区2区| www.在线成人|